java-生产者消费者模式
经常会有公司叫我们手撕代码,比如网易,阿里,那我们是不是该掌握下呢。下面这段代码来自《现代操作系统》进程与线程P49页。
public class ProducerConsumer {
public ProducerConsumer() { }
private static final int N = 100;
static Producer producer = new Producer();
static Consumer consumer = new Consumer();
static Monitor monitor = new Monitor();
private static class Producer extends Thread {
@Override
public void run() {
//你生产的对象
int item;
while(true) {
item = produce_item();
monitor.insert(item);
}
}
public int produce_item() {
//TODO你需要生产的对象
}
}
private static class Consumer extends Thread {
@Override
public void run() {
//你打算消费的对象
int item;
while(true) {
item = monitor.remove();
consumer_item(item);
}
}
private int consumer_item(int item) {
// TODO Auto-generated method stub
}
}
private static class Monitor {
//存放对象的容器
LinkedList<Integer> buffer = new LinkedList<>();
int count =0;
public synchronized void insert(int item) {
if(count == N) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
buffer.add(item);
count++;
if(count == 1) {
notifyAll();
}
}
public synchronized int remove() {
if(count == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int val = buffer.getFirst();
buffer.remove();
count--;
if(count == N-1) {
notifyAll();
}
return val;
}
public static void main(String[] args) {
producer.start();
consumer.start();
}
}
java-生产者消费者模式的更多相关文章
- 基于Java 生产者消费者模式(详细分析)
Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...
- Java 生产者消费者模式详细分析
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java生产者消费者模式
为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能 ...
- java生产者/消费者模式实现——一生产者一消费者(操作值)
胶多不粘话多不甜,直接上代码: 生产者类: /** * Created by 51304 on 2016/2/28. */ public class P { private String lock; ...
- Java设计模式—生产者消费者模式(阻塞队列实现)
生产者消费者模式是并发.多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据.这篇文章我们来看看什么是生产者消费者模式,这个问 ...
- java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...
- java ReentrantLock结合条件队列 实现生产者-消费者模式 以及ReentratLock和Synchronized对比
package reentrantlock; import java.util.ArrayList; public class ProviderAndConsumerTest { static Pro ...
- Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码
说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...
- Java多线程-----实现生产者消费者模式的几种方式
1 生产者消费者模式概述 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理 ...
- java设计模式之生产者/消费者模式
什么是生产者/消费者模式? 某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者 ...
随机推荐
- SpringMVC源码情操陶冶-AbstractHandlerExceptionResolver
springmvc支持服务端在处理业务逻辑过程中出现异常的时候可以配置相应的ModelAndView对象返回给客户端,本文介绍springmvc默认的几种HandlerExceptionResolve ...
- swift3.0 基础练习-实现99乘法表
用的方法比较笨 大致效果是这样 思路: 第一行 拼接一次 第二行 拼接二次 ... 第九行 拼接九次 //num控制个数 var num = 1 //result为结果 var result = &q ...
- C指针1
//定义:指针是一个特殊的数据类型,指针指向内存中的地址,因此,指针变量存储的是内存中的一个地址 //例子,%p表示打印一个地址,打印p表示打印p指向的地址 //输出结果为0x7fff5fbff7dc ...
- angularjs2 ng2 密码隐藏显示
代码结合ionic2开发移动端项目,注册页的密码的input一般用password, 但是用户输入密码时可能会输入错误,需要显示成text. 如图: 首先,输入框的类型判断: <ion-inpu ...
- iOS源码博文集锦3
iOS精选源码 高仿淘宝首页 登录动画 iOS高德二次封装,有定位,轨迹,语音实时导航,GPS纠偏..... 逗视iOS客户端MGDS_Swift 两句代码搞定转场动画 自定义刷新控件 已封装支持自定 ...
- MongoDB增 删 改 查
增 增加单篇文档 > db.stu.insert({sn:'001', name:'lisi'}) WriteResult({ "nInserted" : 1 }) > ...
- HDU 2202 最大三角形(凸包)
Problem Description 老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大.Eddy ...
- JS实现extend函数
//写一个函数,该函数的名称是extend,有两个参数:destination,source 1.如果destination和source都是json对象,完成从source到destination的 ...
- [js高手之路]es6系列教程 - 解构详解
解构通俗点说,就是通过一种特定格式,快捷的读取对象/数组中的数据的方法, es6之前,我们通过对象名称[键] 读取数据 var User = { 'name' : 'ghostwu', 'age' : ...
- NYOJ--95--multiset--众数问题
/* Name: NYOJ--95--众数问题 Date: 20/04/17 16:02 Description: multiset水过 */ #include<set> #include ...