线程经典模式之---生产者和消费者
来源:互联网 发布:北京文思海辉金信软件 编辑:程序博客网 时间:2024/06/08 10:18
package thread;import java.util.LinkedList;import java.util.Queue;public class Demo16{private static Queue<Integer> q=new LinkedList<Integer>();public static void main(String[] args) {int maxSize=2;new Producer(q,maxSize,"生产者1").start();new Producer(q,maxSize,"生产者2").start();new Consumer(q,maxSize,"消费者1").start();new Consumer(q,maxSize,"消费者2").start();new Consumer(q,maxSize,"消费者3").start();}static class Producer extends Thread{Queue<Integer> q;int maxSize;String name;public Producer(Queue<Integer> q,int maxSize,String name) {this.q=q;this.maxSize=maxSize;this.name=name;}public void run() {while(true) {System.out.println(name+ "等待获得队列的锁");synchronized(q) {System.out.println(name+ "获得队列的锁");if(q.size()>=maxSize) {System.out.println("生产已经满员,"+name+"线程请等待。。。");try {//如果生产已经满员了,则生产者进入等待的状态,等待消费者的唤醒(消费者消费之后,maxSize不是最大值了就唤醒所有的线程)q.wait();} catch (InterruptedException e) {e.printStackTrace();}}int num=(int)(int)(Math.random()*100);q.add(num);//唤醒所有的线程,等待CPU调度其一获取锁q.notifyAll();System.out.println(name+"生产一个商品==>"+num+"剩余的q-->"+q);try {Thread.sleep(1000L);System.out.println(name+ "释放队列的锁");} catch (InterruptedException e) {e.printStackTrace();}}}}}static class Consumer extends Thread{Queue<Integer> q;int maxSize;String name;public Consumer(Queue<Integer> q,int maxSize,String name) {this.q=q;this.maxSize=maxSize;this.name=name;}public void run() {while(true) {System.out.println(name+ "等待获得队列的锁");synchronized(q) {System.out.println(name+ "获得队列的锁");if(q.size()==0) {System.out.println(name+"暂时没有商品,线程请等待。。。");try {//如果没有商品,则线程释放锁,进入等待状态,等待生产者的的唤醒q.wait();} catch (InterruptedException e) {e.printStackTrace();}}int num=q.poll();//唤醒所有的线程,等待CPU调度其一获取锁q.notifyAll();System.out.println(name+"消费一个商品==>"+num+"剩余的q-->"+q);try {Thread.sleep(500L);System.out.println(name+ "释放队列的锁");} catch (InterruptedException e) {e.printStackTrace();}}}}}}
阅读全文
0 0
- 线程经典模式之---生产者和消费者
- 线程同步之经典生产者-消费者模型
- java线程经典之生产者与消费者
- 线程经典问题 生产者和消费者
- 线程经典案例---(生产者和消费者)
- Qt之线程同步(生产者消费者模式
- Qt之线程同步(生产者消费者模式
- java线程之生产者与消费者模式
- 线程--生产者消费者模式
- 线程同步中的“生产者和消费者”模式
- 线程之“生产者消费者”
- 线程之生产者消费者
- 线程之生产者、消费者
- 线程之消费者和生产者问题代码
- java线程协作,经典生产者/消费者模式(二、Lock和Condition)
- 多线程之生产者和消费者模式
- 多线程之生产者和消费者模式
- 生产者和消费者模式
- 读《从你的全世界路过》有感
- spring-boot读取props和yml配置文件
- leetcode: 92. Reverse Linked List II
- Android 数据库基础 01
- 复习一:java基础知识点
- 线程经典模式之---生产者和消费者
- spring的IOC详解
- ubuntu常用工具记录
- Python2.7实现监控Linux内存、CPU并发送预警邮件
- leetcode: 93. Restore IP Addresses
- LINUX-LINUX下简易彩色进度条实现
- MapReduce 自定义输入输出(很有用)
- Python 函数式编程未完结
- 唯快不破:TCP/IP详解--TIME_WAIT状态的必要性