Java通过wait()和notifyAll()方法实现线程间通信
发布时间 - 2026-01-11 00:34:46 点击率:次本文实例为大家分享了Java实现线程间通信的具体代码,供大家参考,具体内容如下

Java代码(使用了2个内部类):
package Threads;
import java.util.LinkedList;
/**
* Created by Frank
*/
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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# wait
# notifyAll
# 线程通信
# Java使用wait/notify实现线程间通信上篇
# 浅谈Java线程间通信之wait/notify
# Java使用wait/notify实现线程间通信下篇
# 大家分享
# 具体内容
# 大家多多
# 使用了
# list
# int
# boolean
# max
# lt
# protected
# gt
# Object
# args
# String
# InterruptedException
# throws
# static
# false
# main
# void
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android使用GridView实现日历的简单功能
微信推文制作网站有哪些,怎么做微信推文,急?
网站制作软件有哪些,制图软件有哪些?
微信公众帐号开发教程之图文消息全攻略
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
浅析上传头像示例及其注意事项
如何快速生成ASP一键建站模板并优化安全性?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
python中快速进行多个字符替换的方法小结
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何将凡科建站内容保存为本地文件?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
如何用免费手机建站系统零基础打造专业网站?
如何快速搭建FTP站点实现文件共享?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何基于云服务器快速搭建个人网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
移动端脚本框架Hammer.js
微信小程序 闭包写法详细介绍
如何快速搭建二级域名独立网站?
历史网站制作软件,华为如何找回被删除的网站?
如何在IIS中新建站点并配置端口与物理路径?
如何在云主机快速搭建网站站点?
如何在IIS中新建站点并解决端口绑定冲突?
java中使用zxing批量生成二维码立牌
Laravel如何处理表单验证?(Requests代码示例)
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
香港服务器选型指南:免备案配置与高效建站方案解析
原生JS获取元素集合的子元素宽度实例
如何实现建站之星域名转发设置?
青岛网站建设如何选择本地服务器?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
详解MySQL数据库的安装与密码配置
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
利用python获取某年中每个月的第一天和最后一天
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
LinuxCD持续部署教程_自动发布与回滚机制
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Linux系统命令中screen命令详解
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
装修招标网站设计制作流程,装修招标流程?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
网站建设整体流程解析,建站其实很容易!

