java 线程间的通信 (wait / notify / notifyAll)
时间:2019-04-18
本文章向大家介绍java 线程间的通信 (wait / notify / notifyAll),主要包括java 线程间的通信 (wait / notify / notifyAll)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package waitnotifytest; import java.util.Collections; import java.util.List; import com.google.common.collect.Lists; /** * Test */ public class Test { private static final Class<Test> lockObj = Test.class; private final List<String> list = Collections.synchronizedList(Lists.newArrayListWithCapacity(10)); public static void main(String[] args) { Test test = new Test(); test.test(); } private void push() { while (list.size() >= 10) { System.out.println("厨师:" + Thread.currentThread().getName() + " 等待中..."); try { synchronized (lockObj) { lockObj.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } } list.add("item"); list.add("item"); list.add("item"); list.add("item"); list.add("item"); System.out.println("出菜台的菜品数量" + list.size()); synchronized (lockObj) { System.out.println("厨师通知所有人"); lockObj.notifyAll(); } } private void popup() { synchronized (lockObj) { while (list.isEmpty()) { try { System.out.println("服务员:" + Thread.currentThread().getName() + "等待中..."); lockObj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } list.remove(list.size() - 1); } System.out.println("出菜口的菜品数量为:" + list.size()); synchronized (lockObj) { lockObj.notifyAll(); } System.out.println("服务员通知所有人..."); } public void test() { Runnable runnable = new Runnable() { @Override public void run() { while (true) { push(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Runnable runnable2 = new Runnable() { @Override public void run() { while (true) { popup(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; for (int i = 0; i < 2; i++) { Thread thread = new Thread(runnable); thread.start(); } for (int i = 0; i < 10; i++) { Thread thread = new Thread(runnable2); thread.start(); } } }
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android倒计时神器(CountDownTimer)
- Kotlin如何安全访问lateinit变量的实现
- Android实现加载对话框
- Android RecyclerView实现悬浮吸顶、分隔线、到底提示效果
- Android监听键盘状态获取键盘高度的实现方法
- android实现小音频频繁播放
- 每日一个知识点:什么时候会触发Full GC
- 拥抱kotlin之如何习惯使用kotlin高阶函数
- Android中调用另一个Activity并返回结果(选择头像功能为例)
- Android 自定义缩短Toast显示时间的实例代码
- Android Presentation实现双屏异显
- Android中点击按钮启动另一个Activity及Activity之间传值问题
- Android中使用SeekBar拖动条实现改变图片透明度(代码实现)
- Android实现原生锁屏页面音乐控制
- android实现简单音乐播放器