当前位置: 首页 > news >正文

捡个校花做老婆是哪个网站的百度极速版免费下载安装

捡个校花做老婆是哪个网站的,百度极速版免费下载安装,wordpress做企业网站,盐边网站建设目录 1 线程之间的通信方式主要有以下几种2 共享变量3 锁机制4 条件变量5 信号量6 管道 1 线程之间的通信方式主要有以下几种 在实际开发时#xff0c;一个进程中往往有很多个线程#xff0c;大多数线程之间往往不是绝对独立的#xff0c;比如说我们需要将A和B 两个线程的执… 目录 1 线程之间的通信方式主要有以下几种2 共享变量3 锁机制4 条件变量5 信号量6 管道 1 线程之间的通信方式主要有以下几种 在实际开发时一个进程中往往有很多个线程大多数线程之间往往不是绝对独立的比如说我们需要将A和B 两个线程的执行结果收集在一起然后显示在界面上又或者比较典型的消费者-生产者模式在这些场景下线程间通信成了我们必须使用的手段那么线程之间怎么通信呢 线程间通信方式从实现本质来讲主要可以分为两大类共享内存和消息传递。 相信大家还记得在内存模型一节我们提到多线程并发情况下的三大特性原子性有序性可见性其所对应的解决方案就可以用来实现线程间通信这些解决方案的本质就是共享内存。 对于消息传递而言最经典的实现就是我们的Handler机制在子线程使用主线程的Handler对象将一些信息发送到主线程以便进行处理。 下面我们来看一些线程间通信的典型实现 2 共享变量 共享变量线程之间可以通过共享变量来进行通信。不同的线程可以共享同一个变量并在变量上进行读写操作。需要注意的是共享变量可能会引发线程安全问题需要通过同步机制来确保线程安全。 public class SharedData {private int value;public synchronized int getValue() { return value; }public synchronized void setValue(int value) { this.value value; } }​ 在这个示例中定义了一个共享数据类 SharedData其中包含一个整型变量 value 和两个同步方法 getValue() 和 setValue()用于获取和设置变量的值。由于这两个方法都是同步的因此多个线程可以安全地访问该变量。 public class SharedDataExample {public static void main(String[] args) throws InterruptedException {SharedData sharedData new SharedData();Thread thread1 new Thread(() - {for (int i 0; i 10; i) {sharedData.setValue(i);System.out.println(Thread.currentThread().getName() write sharedData.getValue());try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}});Thread thread2 new Thread(() - {for (int i 0; i 10; i) {System.out.println(Thread.currentThread().getName() read sharedData.getValue());try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}});thread1.start();thread2.start();thread1.join();thread2.join();} }​ 在这个示例中创建了两个线程分别用于读写共享数据 SharedData多次执行该示例可以看到控制台输出表明两个线程在安全地访问共享变量。 结果如图 3 锁机制 锁机制锁机制是一种常用的线程同步机制可以保证在同一时间只有一个线程能够访问共享资源。Java提供了多种锁类型如 synchronized 关键字、ReentrantLock 类等。 public class LockExample {private static Lock lock new ReentrantLock();private static int count 0;private static void increase() {lock.lock();try {count;} finally {lock.unlock();}}public static void main(String[] args) throws InterruptedException {Thread thread1 new Thread(() - {for (int i 0; i 10000; i) {increase();}});Thread thread2 new Thread(() - {for (int i 0; i 10000; i) {increase();}});thread1.start();thread2.start();thread1.join();thread2.join();System.out.println(count);} }​ 在这个示例中使用了 Lock 接口和 ReentrantLock 类来对计数器进行同步多次执行该示例可以看到最终输出的计数器值为 20000。 结果如图 4 条件变量 条件变量条件变量是一种线程间通信机制它用于在一个共享资源上等待某个条件的成立。Java 提供了 Condition 接口来支持条件变量的实现在使用 Condition 时需要先获取锁然后调用 await() 方法等待条件成立当条件成立时可以通过 signal() 或 signalAll() 方法唤醒等待该条件的线程。 public class ConditionExample {private static Lock lock new ReentrantLock();private static Condition condition lock.newCondition();private static int count 0;private static void await() throws InterruptedException {lock.lock();try {condition.await();} finally {lock.unlock();}}private static void signal() {lock.lock();try {condition.signalAll();} finally {lock.unlock();}}public static void main(String[] args) throws InterruptedException {Thread thread1 new Thread(() - {for (int i 0; i 10; i) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}count;System.out.println(Thread.currentThread().getName() increase count to count);if (count 5) {signal();}}});Thread thread2 new Thread(() - {try {await();System.out.println(Thread.currentThread().getName() receive signal, count is count);} catch (InterruptedException e) {e.printStackTrace();}});thread1.start();thread2.start();thread1.join();thread2.join();} }​ 在这个示例中使用了 Lock 接口和 Condition 接口来定义了一个计数器线程1每次增加计数器的值并判断是否达到条件当计数器达到条件时调用 signal() 方法通知线程2线程2等待条件成立后执行相应的操作。 5 信号量 信号量信号量是一种常见的线程同步机制可用于控制多个线程对共享资源的访问。Java 提供了 Semaphore 类来实现信号量Semaphore 类有两个常用的方法 acquire() 和 release()分别用于获取和释放信号量。 public class SemaphoreExample {private static Semaphore semaphore new Semaphore(2);private static void doWork() throws InterruptedException {semaphore.acquire();System.out.println(Thread.currentThread().getName() start working);Thread.sleep(1000);System.out.println(Thread.currentThread().getName() finish working);semaphore.release();}public static void main(String[] args) throws InterruptedException {Thread thread1 new Thread(() - {try {doWork();} catch (InterruptedException e) {e.printStackTrace();}});Thread thread2 new Thread(() - {try {doWork();} catch (InterruptedException e) {e.printStackTrace();}});Thread thread3 new Thread(() - {try {doWork();} catch (InterruptedException e) {e.printStackTrace();}});thread1.start();thread2.start();thread3.start();thread1.join();thread2.join();thread3.join();} }​ 在这个示例中使用了 Semaphore 类来定义了一个信号量线程1、线程2、线程3都需要获取信号量才能进行工作每次执行 doWork() 方法需要占用资源执行完毕后释放信号量。 6 管道 管道管道是一种用于线程间通信的高级机制它可以实现一个线程向另一个线程传送数据。Java 提供了 PipedInputStream 和 PipedOutputStream 两个类来支持管道的实现其中 PipedInputStream 用于读取数据PipedOutputStream 用于写入数据。 public class PipeExample {static class WriterThread extends Thread {private PipedOutputStream output;WriterThread(PipedOutputStream output) {this.output output;}Overridepublic void run() {try {for(int i1;i10;i) {output.write(i);System.out.println(写入数据 i);Thread.sleep(1000);}} catch(Exception e) {e.printStackTrace();} finally {try {output.close();} catch(Exception e) {e.printStackTrace();}}}}static class ReaderThread extends Thread {private PipedInputStream input;ReaderThread(PipedInputStream input) {this.input input;}Overridepublic void run() {try {int value;while((valueinput.read()) ! -1) {System.out.println(读取数据 value);}} catch(Exception e) {e.printStackTrace();} finally {try {input.close();} catch(Exception e) {e.printStackTrace();}}}}public static void main(String[] args) throws IOException {PipedOutputStream output new PipedOutputStream();PipedInputStream input new PipedInputStream(output);Thread thread1 new WriterThread(output);Thread thread2 new ReaderThread(input);thread1.start();thread2.start();try {thread1.join();thread2.join();} catch (InterruptedException e) {e.printStackTrace();}} }在这个示例中使用了 PipedOutputStream 类和 PipedInputStream 类来定义了一个管道线程1向管道中写入数据线程2从管道中读取数据通过管道来实现两个线程之间的通信。 运行结果 需要注意的是以上通信方式都需要在多线程程序中谨慎使用需要考虑线程安全和性能等方面的问题。为了确保程序正确、高效地运行需要根据具体情况选择合适的线程通信方式并进行相应的测试和优化。
http://www.w-s-a.com/news/987355/

相关文章:

  • 天猫商务网站建设目的长春网站设计
  • 公司网站建设会议纪要昆山高端网站建设机构
  • 做消费网站流程深圳网站设计价格
  • 做电影网站怎么接广告中国最新军事新闻视频
  • 网站推广设计做哪些设置自动删除的wordpress
  • 东莞东坑网站设计专业网站制作设
  • 网站怎么做现场直播视频成都科技网站建设找
  • 个人网页设计步骤网站没有内容 能做优化吗
  • 专业网站建设公司招聘网站排行榜
  • 网站建设规范方法企业解决方案架构
  • ae做网站导航wordpress门户
  • 重庆市网站备案材料云南做网站
  • 网页设计模板网站免费珠海视窗网
  • 茂名模板建站定制WordPress注册不提示
  • 陕西营销型手机网站建设深圳制作网站服务
  • 受欢迎的锦州网站建设Wordpress 图片左右滑动
  • 湖南优化网站建设线上网站建设需求
  • 建什么类型的网站访问量比较大哪些外包公司比较好
  • php网站地图外贸建站哪家强外贸网站怎么做
  • 宁波五金网站建设中国建筑网官网投诉查询
  • 哪个网站注册域名便宜免费流程图制作网站
  • 潍坊做网站南宁网站seo优化公司
  • 网站建设的基本技术步骤无网站营销
  • 我国旅游网站的建设网站开发 混合式 数据库
  • 淘宝客网站域名家居网站开发项目计划书
  • 网站打不开显示asp苏州注册公司需要多少钱
  • 凡科建站登录官网wordpress主题有什么用
  • 西安双语网站建设怎么做网页动图
  • 宝安自适应网站建设无锡新区企业网站推广
  • 肇庆建设局网站cpanel 安装wordpress