线程之间的通信--等待唤醒机制
2017-08-09 22:24
281 查看
/* 线程间通讯: 其实就是多个线程在操作同一个资源, 但是操作的动作不同。 */ class Res { String name; String sex; boolean flag = false; } class Input implements Runnable { private Res r ; Input(Res r) { this.r = r; } public void run() { int x = 0; while(true) { synchronized(r) { if(r.flag) try{r.wait();}catch(Exception e){} if(x==0) { r.name="mike"; r.sex="man"; } else { r.name="丽丽"; r.sex = "女女女女女"; } x = (x+1)%2; r.flag = true; r.notify(); } } } } class Output implements Runnable { private Res r ; Output(Res r) { this.r = r; } public void run() { while(true) { synchronized(r) { if(!r.flag) try{r.wait();}catch(Exception e){} System.out.println(r.name+"...."+r.sex); r.flag = false; r.notify(); } } } } class InputOutputDemo { public static void main(String[] args) { //有一堆煤,装在俩卡车上,跑在俩高速公路上 Res r = new Res(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); } } //notifyAll(); /* wait: notify(); notifyAll(); 都使用在同步中,因为要对持有监视器(锁)的线程操作。 所以要使用在同步中,因为只有同步才具有锁。 为什么这些操作线程的方法要定义Object类中呢? 因为这些方法在操作同步中线程时,都必须要标识它们所操作线程持有的锁, 只有同一个锁上的被等待线程,可以被同一个锁上notify唤醒。 不可以对不同锁中的线程进行唤醒。 也就是说,等待和唤醒必须是同一个锁。 而锁可以是任意对象,所以可以被任意对象调用的方法定义Object类中。 */
相关文章推荐
- 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面
- JavaSE 多线程 线程间通信— 等待唤醒机制
- 线程间通信之等待唤醒机制
- java多线程(2):线程通信之生产者消费者模式及等待唤醒机制
- day12线程间的通信,等待唤醒机制,生产者消费者问题。新锁lock(): 守护线程,interrupt()停止线程用,join()yield()
- java线程之间的通信(等待/通知机制)
- java线程之间的通信(等待/通知机制)
- 线程间通信:生产者消费者(等待唤醒机制)
- java线程间通信_线程同步_等待唤醒机制
- java线程之间的通信(等待/通知机制)
- java基础12:线程间通信----等待唤醒机制
- 黑马程序员_九 【线程间通信】【等待唤醒机制】【JDK1.5线程新特性】【其他知识点】
- 线程间通信--等待唤醒机制
- 线程间通信、等待唤醒机制、生产者消费者问题(Lock,Condition)、停止线程和守护线程、线程优先级
- 线程通信-等待和唤醒机制和锁(Lock)机制
- java个人学习笔记18(多线程之间通信+等待唤醒机制)
- 线程间通信 等待唤醒机制 wait notify notifyAll lock Condition唤醒 停止线程interrupt 守护线程setDaemon join yield
- Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解
- 线程间的通信------------等待唤醒机制
- 线程间的通信--等待唤醒机制