Java通过wait()和notifyAll()方法实现线程间通信
短信预约 -IT技能 免费直播动态提醒
本文实例为大家分享了Java实现线程间通信的具体代码,供大家参考,具体内容如下
Java代码(使用了2个内部类):
package Threads;import java.util.LinkedList;public class ProdCons { protected LinkedList<Object> list = new LinkedList<>(); protected int max; protected boolean done = false; public static void main(String[] args) throws InterruptedException { ProdCons prodCons = new ProdCons(100, 3, 4); Thread.sleep(5 * 1000); synchronized (prodCons.list) { prodCons.done = true; try { prodCons.notifyAll(); } catch (Exception ex) { } } } private ProdCons(int maxThreads, int nP, int nC) { this.max = maxThreads; for (int i = 0; i < nP; i++) { new Producer().start(); } for (int i = 0; i < nC; i++) { new Consumer().start(); } } class Producer extends Thread { public void run() { while (true) { Object justProduced = null; try { justProduced = getObj(); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (list) { while (list.size() == max) { try { list.wait(); } catch (InterruptedException e) { System.out.println("Producer INTERRUPTED"); } } list.addFirst(justProduced); list.notifyAll(); System.out.println("Produced 1;List size now " + list.size()); if (done) { break; } } } } } class Consumer extends Thread { public void run() { while (true) { Object object = null; synchronized (list) { if (list.size() == 0) { try { list.wait(); } catch (InterruptedException e) { System.out.println("Consumer INTERRUPTED"); } } if (list.size() > 0) { object = list.removeLast(); } list.notifyAll(); System.out.println("List size now " + list.size()); if (done) { break; } } if (null != object) { System.out.println("Consuming object " + object); } } } } private Object getObj() throws InterruptedException { Thread.sleep(1000); return new Object(); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Java通过wait()和notifyAll()方法实现线程间通信
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Java通过wait()和notifyAll()方法实现线程间通信
本文实例为大家分享了Java实现线程间通信的具体代码,供大家参考,具体内容如下Java代码(使用了2个内部类):package Threads;import java.util.LinkedList;/** * Created by Fra
2023-05-31
2024-04-02
Java如何使用wait/notify实现线程间通信
本文小编为大家详细介绍“Java如何使用wait/notify实现线程间通信”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何使用wait/notify实现线程间通信”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
2023-07-04
Java中怎么使用wait和notify实现线程间的通信
这篇“Java中怎么使用wait和notify实现线程间的通信”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中怎么使
2023-06-30
Java怎么使用wait或notify实现线程间通信
这篇文章主要介绍“Java怎么使用wait或notify实现线程间通信”,在日常操作中,相信很多人在Java怎么使用wait或notify实现线程间通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎
2023-07-04
java线程间通信的方法是什么
Java线程间通信的方法有以下几种:使用共享变量:多个线程共享同一个变量,通过对变量的读写操作来实现线程间的通信。例如,一个线程负责生产数据,另一个线程负责消费数据,它们通过共享一个队列来实现数据的传递。使用wait()和notify()
2023-10-28
怎么在java中实现线程间通信
这篇文章将为大家详细讲解有关怎么在java中实现线程间通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。线程间通信:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以
2023-05-30
2024-04-02
android中有哪些实现线程间通信的方法
这篇文章给大家介绍android中有哪些实现线程间通信的方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1,通过Handler机制主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handle
2023-06-15
Java中怎么实现线程间通信与信号量
Java中怎么实现线程间通信与信号量,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.信号量Semaphore先说说Semaphore,Semaphore可以控制某个资源可
2023-05-30
Java中线程之间的通信是如何实现的
这篇文章将为大家详细讲解有关Java中线程之间的通信是如何实现的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程
2023-05-31
2024-04-02
2024-04-02
Java编程之多线程死锁与线程间通信简单实现代码
死锁定义 死锁是指两个或者多个线程被永久阻塞的一种局面,产生的前提是要有两个或两个以上的线程,并且来操作两个或者多个以上的共同资源;我的理解是用两个线程来举例,现有线程A和B同时操作两个共同资源a和b,A操作a的时候上锁LockA,继续执行
2023-05-30
在Java中,如何实现多线程之间的同步与通信?(Java多线程编程时,应如何确保线程间的同步与有效通信?)
本文详细介绍了Java多线程编程中的同步和通信机制。为了实现同步,可以使用synchronized关键字、Lock接口或Semaphore。同步确保多个线程在访问共享资源时保持一致性。对于通信,共享内存、消息队列和管道等机制允许线程共享数据和协调任务。文中还提供了代码示例、最佳实践和问题的预防策略。通过这些机制,开发者可以创建同步且有效的Java多线程应用程序。
2024-04-02
2023-10-07
2023-09-06
2023-05-14
2023-08-05