JAVA 多线程 线程间的通讯
2013-03-11 11:00
411 查看
//仅作为学习笔记
/* 编程间通讯: 其实就是多个线程在操作同一个资源 但是操作的动作不同 wait(); notify(); notifyAll(); 都使用在同步中,因为要对持有的监视器(锁)的线程操作 所以要使用在同步中,因为只有同步才具有锁 将这些操作线程的方法定义在Object类中的原因是因为这些方法在操作同步线程时, 都需要标示他们所操作线程持有的锁 只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒 不可以对不同锁中的线程进行唤醒 也就是说 等待和唤醒必须是同一个锁 而锁也可以是任意对象,所以可以被任意对象调用的方法定义在Object类中 */ class Res { private String name; private String sex; private boolean flag = false; public synchronized void set(String name, String sex) { if(flag) try{this.wait();}catch(Exception e){} this.name = name; this.sex = sex; flag = true; this.notify(); } public synchronized void out() { if(!flag) try{this.wait();}catch(Exception e){} System.out.println(this.name +"----"+ this.sex); flag = false; this.notify(); } } class Input implements Runnable { private Res r; Input(Res r) { this.r = r; } public void run() { int x = 0; while(true) { if(x == 0) r.set("zhangshan","man"); else r.set("李四","男"); x = (x+1)%2; } } } class Output implements Runnable { private Res r; Output(Res r) { this.r = r; } public void run() { while(true) { synchronized(r) { r.out(); } } } } class TestDemo { public static void main(String []args) { Res r = new Res(); new Thread(new Input(r)).start(); new Thread(new Output(r)).start(); /* Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); */ } }
相关文章推荐
- java线程学习(四)—Java 多线程间的通讯
- JAVA 多线程 线程间的通讯
- JAVA 多线程 线程间的通讯
- java多线程:5 线程间通讯 --新公司入职,有点忙未完成
- Java 多线程学习笔记 线程通讯 wait notify notifyAll的理解
- java多线程——线程间的通讯
- java多线程(2)---生命周期、线程通讯
- Java 回顾笔记_多线程_线程通讯1
- java 中多线程之间的通讯之生产者和消费者 (多个线程之间的通讯)
- 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
- Java多线程㈤—②线程间通讯(wait、notify、notifyAll)
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- java多线程:3、线程通讯
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- 黑马程序员——JAVA基础之多线程的线程间通讯等
- JAVA中的线程——多线程间的通讯
- java 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
- Java 回顾笔记_多线程_线程通讯2
- 15、Java并发性和多线程-线程通讯
- Java多线程㈣—①线程间通讯(生产者及消费者)