java多线程——线程间通信之线程等待唤醒机制
来源:互联网 发布:马刺常青 知乎 编辑:程序博客网 时间:2024/04/30 11:00
- 三个方法
wait()
notify()
notifyAll()
三个方法都使用在同步中,因为要对持有锁(又叫监控)的线程操作。
所以要使用在同步中,因为只有同步才具有锁。 - 为什么这些操作线程的方法均出现在Object类中?
因为这些方法在操作同步中的线程时候,都必须要标识所操作线程识有锁。只有同一个锁上的被等待的线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。
也就是说,等待和唤醒必须是同一个锁。
public class Demo1 { public static void main(String[] args) { Res res = new Res(); Input i = new Input(res); Output o = new Output(res); Thread t1 = new Thread(i); Thread t2 = new Thread(o); t1.start(); t2.start(); }}class Res { private String name; private String gender; private boolean flag; public synchronized void setNameGender(String name, String gender) { if (flag) try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.name = name; this.gender = gender; this.flag = true; this.notify(); } public synchronized void out() { if (!this.flag) try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(this.name + " : " + this.gender); this.flag = false; this.notify(); }}class Input implements Runnable { private Res res; Input(Res res) { this.res = res; } public void run() { int x = 0; while (true) { if (x % 3 == 0) { res.setNameGender("T-mac", "male"); } else if (x % 3 == 1) { res.setNameGender("麦迪", "男人"); } else { res.setNameGender("CBA", "糟糕"); } x++; } }}class Output implements Runnable { private Res res; Output(Res res) { this.res = res; } public void run() { while (true) { res.out(); } }}
1 1
- java多线程——线程间通信之线程等待唤醒机制
- JavaSE 多线程 线程间通信— 等待唤醒机制
- Java多线程四:线程间通信/等待唤醒机制
- java线程间通信——等待唤醒机制
- 线程间通信之等待唤醒机制
- 线程间通信之等待唤醒机制
- Java线程间通信-等待唤醒机制
- java多线程之 生产者和消费者 线程间通信 等待与唤醒机制
- java多线程学习之线程通信-wait()等待 notify()唤醒
- java多线程(2):线程通信之生产者消费者模式及等待唤醒机制
- 多线程学习笔记(四)之线程间通信---等待唤醒机制
- 多线程-线程间通信和等待唤醒
- Java基础学习5_多线程(线程间通信--等待唤醒机制)
- java多线程-线程间通信-示例代码-解决安全问题-等待唤醒机制wait()notify()notifyAll()
- 线程间通信--等待唤醒机制
- 线程间的通信------------等待唤醒机制
- java多线程之线程间通信:等待/通知机制
- java语言基础(94)——线程间通信(等待唤醒机制)
- UVA 101 The Blocks Problem
- IntelliJ IDEA 配置MAVEN后从网上GIT项目仓库路径修改方法
- mac 下统计代码行数
- c++ vector的成员函数解析
- yii2操作数据库 mysql 读写分离 主从复制
- java多线程——线程间通信之线程等待唤醒机制
- nyoj-106-背包问题
- uboot-命令实现分析
- 2015年04月09日
- 网络编程 I/O模型
- 蓝桥杯2015培训(5)
- (十一) yii2 在视图内进行渲染
- 蓝桥杯2015培训(6)
- 蓝桥杯2015培训(7)