java多线程之间的相互通信
2018-03-28 22:49
399 查看
利用Condition的await方法和signal方法了指定叫醒一个线程、通过变量signal来实现线程之间的通信
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Demo { private int signal; Lock lock = new ReentrantLock(); Condition a = lock.newCondition(); Condition b = lock.newCondition(); Condition c = lock.newCondition(); public void a() { lock.lock(); while(signal != 0 ) { try { a.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("a"); signal ++; b.signal(); lock.unlock(); } public void b() { lock.lock(); while(signal != 1) { try { b.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("b"); signal ++; c.signal(); lock.unlock(); } public void c () { lock.lock(); while(signal != 2) { try { c.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("c"); signal = 0; a.signal(); lock.unlock(); } public static void main(String[] args) { Demo d = new Demo(); A a = new A(d); B b = new B(d); C c = new C(d); new Thread(a).start(); new Thread(b).start(); new Thread(c).start(); } } class A implements Runnable { private Demo demo; public A(Demo demo) { this.demo = demo; } @Override public void run() { while(true) { demo.a(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class B implements Runnable { private Demo demo; public B(Demo demo) { this.demo = demo; } @Override public void run() { while(true) { demo.b(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class C implements Runnable { private Demo demo; public C(Demo demo) { this.demo = demo; } @Override public void run() { while(true) { demo.c(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- java使用轮询和wait()/notify()实现多线程之间的通信
- java多线程实现服务器端与多客户端之间的通信
- java多线程下的相互通信的例子(使用notifyAll)
- Java 多线程编程之六:线程之间的通信(附源代码)
- java个人学习笔记18(多线程之间通信+等待唤醒机制)
- 应用java多线程实现服务器端与多客户端之间的通信
- 对于JAVA多线程中线程之间的通信方式的理解
- Java多线程(3) 线程之间通信
- Java多线程之间通信——修改对象中的成员变量
- java多线程---线程之间的通信
- Java 多线程编程之六:线程之间的通信(附源代码)
- JAVA基础学习(十二)--多线程一线程之间的通信
- 【多线程】三种方案实现多线程之间相互协作的通信
- 黑马程序员:Java基础——多线程之间的通信
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- java 多线程 线程之间的通信
- Java 多线程编程之六:线程之间的通信(附源代码)
- 应用java多线程实现server端与多client之间的通信
- java 多线程之间的通信
- 【多线程】三种方案实现多线程之间相互协作的通信