java生产者/消费者模式实现——一生产者一消费者(操作值)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java生产者/消费者模式实现——一生产者一消费者(操作值),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1937字,纯文字阅读大概需要3分钟。
内容图文
![java生产者/消费者模式实现——一生产者一消费者(操作值)](/upload/InfoBanner/zyjiaocheng/1134/f399332c7bbe45cbaae47aed5c28c75f.jpg)
胶多不粘话多不甜,直接上代码:
生产者类:
/** * Created by 51304 on 2016/2/28. */ public class P { private String lock; public P(String lock){ this.lock = lock; } publicvoid setValue(){ try{ synchronized (this.lock){ if(!ValueObject.value.equals("")){ lock.wait(); } String value = System.currentTimeMillis() + "_" + System.nanoTime(); System.out.println("set value is " + value); ValueObject.value = value; lock.notify(); } } catch (InterruptedException e){ e.printStackTrace(); } } }
消费者类:
import com.sun.org.apache.xpath.internal.SourceTree; /** * Created by 51304 on 2016/2/28. */ public class C { private String lock; public C(String lock){ this.lock = lock; } publicvoid getValue(){ try{ synchronized (this.lock){ if(ValueObject.value.equals("")){ this.lock.wait(); } System.out.println("get value is " + ValueObject.value); ValueObject.value = ""; this.lock.notify(); } } catch (InterruptedException e){ e.printStackTrace(); } } }
存储值的对象:
/** * Created by 51304 on 2016/2/28. */ public class ValueObject { public static String value = ""; }
生产者线程:
/** * Created by 51304 on 2016/2/28. */ public class ThreadP extends Thread { private P p; public ThreadP(P p){ this.p = p; } @Override publicvoid run(){ while (true){ p.setValue(); } } }
消费者线程:
/** * Created by 51304 on 2016/2/28. */ public class ThreadC extends Thread { private C c; public ThreadC(C c){ this.c = c; } @Override publicvoid run(){ while (true){ c.getValue(); } } }
main方法:
/** * Created by 51304 on 2016/2/28. */ public class TestMain { public static void main(String[] args) { String lock = new String(""); P p = new P(lock); C c = new C(lock); ThreadP threadP =new ThreadP(p); ThreadC threadC = new ThreadC(c); threadP.start(); threadC.start(); } }
运行截图:
思考:如果多生产者和多消费者程序能正常工作吗?
答案是:程序会出现假死,也就是所有线程都停留在等待状态。出现这个现象的原因是,多生产者模式下notify()通知的线程还是生产者(选择通知那个线程时随机的,但只会通知一个),同理消费者也一样。当然解决的办法很明显使用notifyall().
原文:http://www.cnblogs.com/maxiaofang/p/5224262.html
内容总结
以上是互联网集市为您收集整理的java生产者/消费者模式实现——一生产者一消费者(操作值)全部内容,希望文章能够帮你解决java生产者/消费者模式实现——一生产者一消费者(操作值)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。