Thread(线程间通讯,等待唤醒机制)
2015-04-23 12:48
309 查看
</pre><pre name="code" class="java">package process; /* * 线程间通讯: * 其实就是多个线程在操作同一个资源 * 但是操作的动作不同。 * * wait: * notify() * notifyAll() * * 都使用在同步中,因为要对持有监视器(锁)的线程操作 * 所以要使用在同步中,因为只有同步才具有锁 * * 为什么这些操作线程的方法要定义object类中呢? * 因为这些方法在操作同步中线程时,都必须要表示他们所操作线程只有的锁。 * 只有同一个锁上的被等待线程,可以被同一个notify唤醒 * 不可以对不同锁中的线程进行唤醒 * * 也就是说,等待和唤醒必须是同一个锁 * * 而锁可以是任意对象,所以可以被任意对象调用的方法定义object类中。 */ class Res{ String name; String sex; boolean flag = false; } class Input implements Runnable{ private Res s; Input(Res s){ this.s = s; } public void run(){ int x = 0; while(true){ synchronized(s){ if(s.flag) try { s.wait(); } catch (Exception e) { } if(x == 0){ s.name = "mike"; s.sex = "nan"; }else{ s.name="丽丽"; s.sex = "女"; } x = (x+1)%2; s.flag = true; s.notify(); } } } } class Output implements Runnable{ private Res s; Output(Res s){ this.s = s; } public void run(){ while(true){ synchronized(s){ if(!s.flag) try { s.wait(); } catch (Exception e) { } System.out.println(s.name+"...."+s.sex); s.flag = false; s.notify(); } } } } public class InputOutputDemo { public static void main(String[] args){ Res s = new Res(); Input i = new Input(s); Output o = new Output(s); Thread t = new Thread(i); Thread t1 = new Thread(o); t.start(); t1.start(); } }
相关文章推荐
- 线程间通讯--ResourceDemo2 --等待/唤醒机制
- 线程间通讯------等待唤醒机制(代码优化)
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- Thread线程使用等待唤醒机制实现线程交替执行任务
- 线程间通讯和等待唤醒机制
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- JavaSE 多线程 线程间通讯—等待唤醒机制代码优化(背下来)
- 线程间通讯-------等待唤醒机制
- 线程的等待唤醒机制
- 多线程间的通讯之等待唤醒机制
- 线程通信-等待和唤醒机制和锁(Lock)机制
- 多线程__【线程间通信】【等待唤醒机制】【多生产多消费】【Lock&Condition接口】
- 多线程通讯-等待唤醒机制
- (九)Java入门--多线程(4)线程通信--等待唤醒机制
- java 分别利用synchronized和jdk1.5新特性实现多消费者-多生产者线程的等待唤醒机制
- 线程间的等待唤醒机制-(一)
- java多线程——线程间通信之线程等待唤醒机制
- 线程间的通信--等待唤醒机制
- 线程间的通讯,等待与唤醒
- java基础12:线程间通信----等待唤醒机制