java多线程(2)-实现生产者/消费者模式
来源:互联网 发布:php域名授权管理系统 编辑:程序博客网 时间:2024/06/06 12:43
实现生产者/消费者一对一交替打印
package cn.limbo.thread.ConditionDemo;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * <B>功能简述</B><br> * 实现生产者/消费者模式:一对一交替打印 * * @date 2017/12/15 */public class MyService { //ReentrantLock对象的创建 private Lock lock = new ReentrantLock(); //newCondition 对象可以更好的实现线程的等待和唤醒 private Condition condition = lock.newCondition(); private boolean hasValue = false; public void set() { try { lock.lock(); while (hasValue) { condition.await(); } System.out.println(" 打印*+ "); hasValue = true; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void get() { try { lock.lock(); while (!hasValue) { condition.await(); } System.out.println(" 打印*- "); hasValue = false; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }}class MyThreadA extends Thread { private MyService myService; public MyThreadA(MyService myService) { super(); this.myService = myService; } @Override public void run() { for (int i = 0; i < Integer.MAX_VALUE; i++) { myService.set(); } }}class MyThreadB extends Thread { private MyService myService; public MyThreadB(MyService myService) { super(); this.myService = myService; } @Override public void run() { for (int i = 0; i < Integer.MAX_VALUE; i++) { myService.get(); } }}class Run{ public static void main(String[] args) { MyService service = new MyService(); MyThreadA myThreadA = new MyThreadA(service); myThreadA.start(); MyThreadB threadB = new MyThreadB(service); threadB.start(); }}
多对多交替打印
package cn.limbo.thread.ConditionM2MDemo;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * Created by lhh on 2017/12/18. */public class MyService { private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); private boolean hasValue = false; public void set() { try { lock.lock(); while (hasValue) { System.out.println(" 有可能**+连续"); condition.await(); } System.out.println(" 打印*+ "); hasValue = true; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void get() { try { lock.lock(); while (!hasValue) { System.out.println(" 有可能**-连续"); condition.await(); } System.out.println(" 打印*- "); hasValue = false; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }}class MyThreadA extends Thread { private MyService myService; public MyThreadA(MyService myService) { super(); this.myService = myService; } @Override public void run() { for (int i = 0; i < Integer.MAX_VALUE; i++) { myService.set(); } }}class MyThreadB extends Thread { private MyService myService; public MyThreadB(MyService myService) { super(); this.myService = myService; } @Override public void run() { for (int i = 0; i < Integer.MAX_VALUE; i++) { myService.get(); } }}class Run { public static void main(String[] args) { MyService service = new MyService(); MyThreadA[] myThreadAs = new MyThreadA[10]; MyThreadB[] myThreadBs = new MyThreadB[10]; for (int i = 0; i < 10; i++) { myThreadAs[i] = new MyThreadA(service); myThreadBs[i] = new MyThreadB(service); myThreadAs[i].start(); myThreadBs[i].start(); } }}
运行结果
阅读全文
0 0
- java多线程(2)-实现生产者/消费者模式
- java多线程实现生产者消费者模式
- Java多线程实现消费者/生产者模式
- Java多线程实现生产者消费者模式
- java 多线程实现生产者消费者模式
- Java多线程实现简单生产者消费者模式
- JAVA多线程(三)生产者消费者模式及实现方法
- Java多线程生产者/消费者模式(一)
- Java多线程生产者/消费者模式(二)
- java多线程 ----生产者消费者模式
- Java多线程 --- 生产者消费者模式
- Java多线程 生产者消费者模式
- java多线程---生产者消费者模式
- java 多线程 生产者消费者模式
- 【Java多线程】生产者消费者模式
- 多线程-生产者消费者模式(2)
- 生产者消费者Java多线程实现
- Java多线程实现,生产者消费者
- iOS 检测网络状态的2个方法
- PHP 使用session
- 数据挖掘学习------------------2-关联规则-1-基本概念
- DOTween:Sequence
- YOLOv2源码分析(一)
- java多线程(2)-实现生产者/消费者模式
- JS统计页面访问次数并传递可选参数
- jQuery选择器
- ExpandableListView二级列表购物车,MVP获取数据
- Maven之无法创建webapp1.0的问题-yellowcong
- Undefined variable "dagnn" or class "dagnn.DagNN.loadobj"
- linux统计字符串在文件出现次数
- iOS 获取 webView 加载完成后的高度
- Android版本与API对照表