java多线程中的生产者消费者模式实现线程间的通信
2017-03-04 11:21
225 查看
本实例是一个简单的:单生者vs单消费者
1.生产者类:
2.生产者线程:
3.消费者类:
4.消费者线程:
5.数据缓冲池:
6.测试类:
1.生产者类:
package p_t_test; /** * wait/notify变形模式:生产者消费者模式实现进程间通信 * * 生产者 * @author lxb * */ public class P { private String lock; public P(String lock){ this.lock = lock; } public void setValue(){ try{ synchronized (lock) { //如果不为空,生产者处于等待状态 if(!ValueObject.value.equals("")){ System.out.println("我是消费者,此时缓冲池中有数据,我正在等待这个池没有数据被消费者用,它用完之后,我就放新的数据 "); lock.wait(); } String value = System.currentTimeMillis() + "_"+System.nanoTime(); System.out.println("我放的 的值是:"+value); lock.notify(); } }catch(InterruptedException e){ e.printStackTrace(); } } }
2.生产者线程:
package p_t_test; /** * 生产者线程 * @author lxb * */ public class ThreadP extends Thread{ private P p; public ThreadP(P p){ this.p = p; } public void run(){ //生产者不停的向缓冲池中存放数据 while(true){ p.setValue(); } } }
3.消费者类:
package p_t_test; /** * 消费者类 * @author lxb * */ public class C { private String lock; public C(String lock){ this.lock = lock; } public void getValue(){ try{ synchronized (lock) { //当没有值可供消费者使用时,使用消费者的线程处于等待状态 if(ValueObject.value.equals("")){ System.out.println("我是消费者,你妹生产者为毛还不放值 ,等了半天了,老子急用:"); lock.wait(); } System.out.println("消费者获取到的值是:"+ValueObject.value); ValueObject.value = ""; //消费者取完值之后,将当前值置空 lock.notify(); //唤醒生产者可以向缓冲池中存放数据了 } }catch(InterruptedException e){ e.printStackTrace(); } } }
4.消费者线程:
package p_t_test; /** * 消费者线程 * @author lxb * */ public class ThreadC extends Thread{ private C c; public ThreadC(C c){ this.c = c; } public void run(){ /** * 消费者不停的从缓冲池中取数据 */ while(true){ c.getValue(); } } }
5.数据缓冲池:
package p_t_test; public class ValueObject { public static String value=""; }
6.测试类:
package p_t_test; public class TestClient { public static void main(String[] args) { String lock = new String(""); // 创建对象锁 P p = new P(lock); C r = new C(lock); ThreadP pThread = new ThreadP(p); ThreadC cThread = new ThreadC(r); pThread.start(); cThread.start(); } }
相关文章推荐
- java多线程通过管道流实现不同线程之间的通信
- Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”
- VC中利用多线程技术实现线程之间的通信
- 源码分析Android Handler是如何实现线程间通信的
- 线程通信之生产者消费者间wait()、notify实现
- Handler实现两个子线程(Thrae)通信
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
- Java并发编程(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明
- ZeroMQ(java)之I/O线程的实现与组件间的通信
- 【Java】线程wait() notify()通信 实现生产者 消费者问题
- 第01天多线程网络:(11):NSThread实现线程间通信
- 自定义消息实现线程间通信
- JAVA多线程之——线程之间的通信
- JAVA多线程之——线程之间的通信
- 线程间的基本通信的实现
- Java 里如何实现线程间通信?
- 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- Java多线程与并发应用-(3)-传统线程通信技术及生产者消费者模式
- Condidtion实现多线程之间的线程通信
- Java多线程编程核心技术---线程间通信(二)