java利用多线程实现生产者和消费者功能————美的掉渣的代码
2021-04-15 00:29
标签:await ace void pre stack tac throws integer eth 1.使用wait()/notifyAll实现生产者和消费者 2.使用ReentrantLock和condition实现生产者和消费者功能 分析:wait/notify只能实现一个条件队列;准备唤醒生产者队列,却把消费者也唤醒了;相互竞争后最终生产者满足条件,开始执行,消费者再次变成等待状态。 而使用显示锁,则可以创建多条等待队列。 java利用多线程实现生产者和消费者功能————美的掉渣的代码 标签:await ace void pre stack tac throws integer eth 原文地址:https://www.cnblogs.com/guoyansi19900907/p/13335224.html 1 /**
2 * 锁对象类
3 * 协作类
4 */
5 public class MyQueue {
6 private Queue
1 /**
2 * 生产者线程
3 */
4 public class ProduceThread extends Thread {
5 private MyQueue queue;
6
7 public ProduceThread(MyQueue queue) {
8 this.queue = queue;
9 }
10
11 @Override
12 public void run() {
13 int num=0;
14 while (true){
15 try {
16 System.out.println("生产数据:" + num);
17 queue.put(num);
18 num++;
19 Thread.sleep((int)(Math.random()*100));
20 } catch (InterruptedException e) {
21 e.printStackTrace();
22 }
23 }
24 }
25 }
1 /**
2 * 消费者线程
3 */
4 public class ConsumerThread extends Thread {
5 private MyQueue queue;
6
7 public ConsumerThread(MyQueue queue) {
8 this.queue = queue;
9 }
10
11 @Override
12 public void run() {
13 while (true){
14 try {
15 int res=queue.get();
16 System.out.println("消费数据:"+res);
17 Thread.sleep((int)(Math.random()*100));
18 } catch (InterruptedException e) {
19 e.printStackTrace();
20 }
21 }
22 }
23 }
1 /**
2 * 主线程
3 */
4 public class MainTest {
5 public static void main(String[] args) {
6 MyQueue queue=new MyQueue(100);
7 new ProduceThread(queue).start();
8 new ConsumerThread(queue).start();
9 }
10 }
1 /**
2 * 协作类
3 */
4 public class MyBlockQueue {
5 private Queue
1 /**
2 * 生产者线程
3 */
4 public class ProduceThread extends Thread {
5 private MyBlockQueue queue;
6
7 public ProduceThread(MyBlockQueue queue) {
8 this.queue = queue;
9 }
10
11 @Override
12 public void run() {
13 int num=0;
14 while (true){
15 try {
16 System.out.println("生产数据:" + num);
17 queue.put(num);
18 num++;
19 Thread.sleep((int)(Math.random()*100));
20 } catch (InterruptedException e) {
21 e.printStackTrace();
22 }
23 }
24 }
25 }
1 /**
2 * 消费者线程
3 */
4 public class ConsumerThread extends Thread {
5 private MyBlockQueue queue;
6
7 public ConsumerThread(MyBlockQueue queue) {
8 this.queue = queue;
9 }
10
11 @Override
12 public void run() {
13 while (true){
14 try {
15 int res=queue.get();
16 System.out.println("消费数据:"+res);
17 Thread.sleep((int)(Math.random()*100));
18 } catch (InterruptedException e) {
19 e.printStackTrace();
20 }
21 }
22 }
23 }
1 /**
2 * 主线程
3 */
4 public class MainTest {
5 public static void main(String[] args) {
6 MyBlockQueue queue=new MyBlockQueue(100);
7 new ProduceThread(queue).start();
8 new ConsumerThread(queue).start();
9 }
10 }
上一篇:88. 合并两个有序数组
文章标题:java利用多线程实现生产者和消费者功能————美的掉渣的代码
文章链接:http://soscw.com/index.php/essay/75867.html