java 线程-一对一生产者消费者
来源:互联网 发布:js获取手机当前位置 编辑:程序博客网 时间:2024/06/04 19:46
线程中生产者消费者是一个经典问题, 也是一个难点问题,下边写一段1对1的生产者消费者代码:
package com.mjlf.myBatis.thread;/** * Created by a123 on 17/2/18. * 一对一生产者消费者 */public class PC { private String value = ""; class P { private PC lock; public P(PC lock) { super(); this.lock = lock; } public void create() { try { synchronized (this.lock) { Thread.sleep(1000); if (!"".equals(value)) { this.lock.wait(); } System.out.println("create"); value = "create"; this.lock.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } class C { private PC lock; public C(PC lock) { super(); this.lock = lock; } public void direc() { try { synchronized (this.lock) { Thread.sleep(1000); if ("".equals(value)) { this.lock.wait(); } System.out.println("direc"); value = ""; this.lock.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } class ThreadP implements Runnable { private P p; public ThreadP(P p) { this.p = p; } public void run() { while (true) { this.p.create(); } } } class ThreadC implements Runnable { private C c; public ThreadC(C c) { this.c = c; } public void run() { while (true) { this.c.direc(); } } } public static void main(String[] args){ PC pc = new PC(); P p = pc.new P(pc); C c = pc.new C(pc); Thread threadP = new Thread(pc.new ThreadP(p)); Thread threadC = new Thread(pc.new ThreadC(c)); threadC.start(); threadP.start(); }}//结果:/**createdireccreatedireccreatedireccreate*/
代码解释:
为了在同一个文件中写,该样例使用了内部类。其中根据value变量的值判断当前是该生产还是该消费, P类是生产类,C类是消费类, 同样ThreadP是生产线程,ThreadC是消费线程, 当判断value值为“”时,消费线程wait,当判断value值不为“”时,生产线程wait,每次执行生产或消费后都需要将另一个等待线程notify,否则线程将永远等待下去。
0 0
- java 线程-一对一生产者消费者
- java 线程生产者消费者
- java一对一生产者消费者多线程练习
- 生产者与消费者--一对一
- Java线程----生产者消费者模型
- java线程 生产者与消费者
- Java 线程之生产者消费者
- java线程 生产者与消费者
- java线程(生产者/消费者)
- Java线程 生产者消费者问题
- java线程通信-生产者消费者
- 生产者消费者——一对一
- 消费者生产者模型-java 线程模拟
- java线程模拟生产者与消费者
- Java线程:并发协作-生产者消费者模型
- 生产者消费者问题之Java线程实现
- Java线程:并发协作-生产者消费者模型
- Java线程:并发协作-生产者消费者模型
- js实现高度自适应的两个div高度相等
- 学习Spring Cloud第四课(服务注册与服务发现)
- Python3 爬虫编写报错及解决方法整理
- C++操作符重载
- 2014蓝桥杯A组java第七题(有缺陷)
- java 线程-一对一生产者消费者
- git revert 后悔了 还原修改前的版本 + git 常用命令
- C++ primer 第一章的两个 if 语句例题
- Android关于创建AIDL以及调用AIDL的问题
- PBR——基于物理的实时渲染
- Require与include的区别
- 【Oracle】用户和监听服务
- BZOJ 1150 数据备份Backup 【贪心】【堆】
- JAVA基础补完之并发编程