生产者消费者-Java代码实现
import java.util.LinkedList;
class Storage{
private static final int MAX = 100;
LinkedList<Object> list = new LinkedList<>();
public void produce(int num) throws Exception{
synchronized(list){
while(list.size() + num > MAX){
System.out.println("仓库太小,生产装不下!!");
list.wait();
}
for(int i=0; i<num; i++)
list.add(new Object());
System.out.println("生产了---" + num);
list.notifyAll();
}
}
public void consume(int num) throws Exception{
synchronized(list){
while(list.size() < num){
System.out.println("仓库的库存不够");
list.wait();
}
for(int i=0; i<num; i++)
list.remove();
System.out.println("消费了---" + num);
list.notifyAll();
}
}
}
class Producer implements Runnable{
private int num;
private Storage storage;
public Producer(int num, Storage storage){
this.num = num;
this.storage = storage;
}
public void produce(){
try{
storage.produce(num);
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
produce();
}
}
class Consumer implements Runnable{
private int num;
private Storage storage;
public Consumer(int num, Storage storage){
this.num = num;
this.storage = storage;
}
public void consume(){
try{
storage.consume(num);
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
consume();
}
}
public class Pro_Con{
public static void main(String[] args){
Storage st = new Storage();
Producer p1 = new Producer(10, st);
Producer p2 = new Producer(80, st);
Consumer c1 = new Consumer(40, st);
Consumer c2 = new Consumer(70, st);
new Thread(c1, "消费者1").start();
new Thread(c2, "消费者2").start();
new Thread(p1, "生产者2").start();
new Thread(p2, "生产者2").start();
}
}
生产者消费者-Java代码实现的更多相关文章
- Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码
说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...
- Linux 进程间通信(包含一个经典的生产者消费者实例代码)
前言:编写多进程程序时,有时不可避免的需要在多个进程之间传递数据,我们知道,进程的用户的地址空间是独立,父进程中对数据的修改并不会反映到子进程中,但内核是共享的,大多数进程间通信方式都是在内核中建立一 ...
- 经典线程同步问题(生产者&消费者)--Java实现
生产者-消费者(producer-consumer)问题是一个著名的线程同步问题.它描述的是:有一群生产者线程在生产产品,并将这些产品提供给消费者线程去消费. 为使生产者与消费者之间能够并发执行,在两 ...
- java生产者消费者问题代码分析
作者要的是一个生产者生成,接着必须有一个消费者消费,那这不是需要单线程吗?或者使用1个大小的阻塞队列.所以只谈论问题本身,不谈论好不好. 具体代码: import java.util.concurre ...
- 生产者消费者 java.util.concurrent.lock包
package com.mozq.thread.producer2; import java.util.concurrent.locks.Condition; import java.util.con ...
- 生产者消费者JAVA实现
三种实现方式: 1. Object对象的wait(),notify(),加synchronize. 2. Lock的await(),signal(). 3. BlockingQueue阻塞队列. Ob ...
- 生产者消费者问题Java三种实现
生产者-消费者Java实现 2017-07-27 1 概述 生产者消费者问题是多线程的一个经典问题,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品. 解决生产者/ ...
- 用yield写协程实现生产者消费者
思路: yield可以使得函数阻塞,next,和send可以解阻塞,实现数据不竞争的生产者消费者模式 代码: import random #随机数,模拟生产者的制造物 def eat(): #消费者 ...
- python2.0_s12_day9之day8遗留知识(queue队列&生产者消费者模型)
4.线程 1.语法 2.join 3.线程锁之Lock\Rlock\信号量 4.将线程变为守护进程 5.Event事件 * 6.queue队列 * 7.生产者消费者模型 4.6 queue队列 que ...
随机推荐
- [JAVA][Liferay] Configure sharding in multiple sites
create databases first portal-ext.properties配置 hibernate.dialect=org.hibernate.dialect.PostgreSQLDia ...
- Bootstrap知识点梳理
- Could not find or load main class Hello
在 linux 下写了一个非常简单的 Hello World 程序,编译正常,运行报错:Error: Could not find or load main class Hello 这是由于 CLAS ...
- 超详细Hexo+Github博客搭建小白教程
原文链接:超详细Hexo+Github博客搭建小白教程 去年9月的时候开始搭建了第一个自己的独立博客,到现在也稍微像模像样了.很多小伙伴应该也想过搭建一个自己的博客,网上也有一堆详细教程.我在此稍稍总 ...
- Sigrity PowerDC是如何计算IR Drop Margin?
IR Drop仿真是一个系统层面的问题,需要考虑完整的Power Distribution System(PDS)链路上所有压降,并以此来优化每颗器件所接收到的供电电压. 在设计设计中所有的电源供电芯 ...
- frame、window和dialog区别
属性 Window Frame Dialog 模式化 不是 不是 不是(可设置) 可调大小 不可 可 可 标题栏 无 有 有 边界 无 有 有 标题 无 有 有 菜单栏 无 有 无 焦点管理器 有 有 ...
- Altium_Designer-PCB中各层作用详解
一直以来,对PCB中各层,比如:solder层.paste层.Top overlay层等等这些一知半解.今天仔细看了下,向大家介绍一下,有不对的地方还请指正. 1.mechanical机械层是定义整个 ...
- linux lnmp搭建
1.安装nginx: yum install gcc -y yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum inst ...
- RF脚本中的坑1: SyntaxError: invalid token
话不多说,直接上调试脚本: 执行后${b}=8:没问题.然后${a}改成08继续: 执行后居然报错了: 经过多次尝试08或者09时,都会报SyntaxError错误:后来查阅语法,才恍然大悟:Pyth ...
- 6.Netbackup-Oracle数据库恢复演练报告(下)
1.1 Oracle数据库恢复 目录 1 安装新的客户端 2 新建异机恢复文件 3 新建数据库实例 4 建立spfile文件 5 建立数据文件夹 6 启动数据库到nomount状态 7 列出备份信息 ...