java生产者/消费者模式实现——一生产者一消费者(操作值)
胶多不粘话多不甜,直接上代码:
生产者类:
/**
* Created by 51304 on 2016/2/28.
*/
public class P {
private String lock;
public P(String lock){
this.lock = lock;
} public void setValue(){
try{
synchronized (this.lock){
if(!ValueObject.value.equals("")){
lock.wait();
}
String value = System.currentTimeMillis() + "_" +
System.nanoTime();
System.out.println("set value is " + value);
ValueObject.value = value;
lock.notify();
}
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
消费者类:
import com.sun.org.apache.xpath.internal.SourceTree; /**
* Created by 51304 on 2016/2/28.
*/
public class C {
private String lock;
public C(String lock){
this.lock = lock;
} public void getValue(){
try{
synchronized (this.lock){
if(ValueObject.value.equals("")){
this.lock.wait();
}
System.out.println("get value is " + ValueObject.value);
ValueObject.value = "";
this.lock.notify();
}
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
存储值的对象:
/**
* Created by 51304 on 2016/2/28.
*/
public class ValueObject {
public static String value = "";
}
生产者线程:
/**
* Created by 51304 on 2016/2/28.
*/
public class ThreadP extends Thread {
private P p;
public ThreadP(P p){
this.p = p;
} @Override
public void run(){
while (true){
p.setValue();
}
}
}
消费者线程:
/**
* Created by 51304 on 2016/2/28.
*/
public class ThreadC extends Thread {
private C c;
public ThreadC(C c){
this.c = c;
} @Override
public void run(){
while (true){
c.getValue();
}
}
}
main方法:
/**
* Created by 51304 on 2016/2/28.
*/
public class TestMain {
public static void main(String[] args) {
String lock = new String("");
P p = new P(lock);
C c = new C(lock); ThreadP threadP =new ThreadP(p);
ThreadC threadC = new ThreadC(c); threadP.start();
threadC.start();
}
}
运行截图:

思考:如果多生产者和多消费者程序能正常工作吗?
答案是:程序会出现假死,也就是所有线程都停留在等待状态。出现这个现象的原因是,多生产者模式下notify()通知的线程还是生产者(选择通知那个线程时随机的,但只会通知一个),同理消费者也一样。当然解决的办法很明显使用notifyall().
java生产者/消费者模式实现——一生产者一消费者(操作值)的更多相关文章
- 生产都消费者模式的一个demo,消费者设置缓存
package queue; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlocki ...
- Java多线程-----实现生产者消费者模式的几种方式
1 生产者消费者模式概述 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理 ...
- Java并发(基础知识)—— 阻塞队列和生产者消费者模式
1.阻塞队列 Blocki ...
- Java并发编程()阻塞队列和生产者-消费者模式
阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法.如果队列已经满了,那么put方法将阻塞直到有空间可用:如果队列为空,那么take方法将会阻塞直到有元素可用.队列可以 ...
- java实现多线程生产者消费者模式
1.概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消 ...
- 转:Task任务调度实现生产者消费者模式
我们经常会遇到生产者消费者模式,比如前端各种UI操作事件触发后台逻辑等.在这种典型的应用场景中,我们可能会有4个业务处理逻辑(下文以P代表生产者,C代表消费者): 1. FIFO(先进先出) ...
- python 并发编程 锁 / 信号量 / 事件 / 队列(进程间通信(IPC)) /生产者消费者模式
(1)锁:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 虽然使用加锁的形式实现了 ...
- 生产者消费者模式 php 【转】
在工作中常常听到某某大牛之间的交谈会涉及到,xx消费者啊啥的,到底什么大牛之间讲的是什么? 这篇文章主要解决三个问题: 1.到底什么是生产者和消费者,以及它们之间的故事 2.它们之间靠什么交流 3.应 ...
- Linux进程通信之共享内存实现生产者/消费者模式
共享内存 共享内存是内核为进程创建的一个特殊内存段,它将出现在进程自己的地址空间中,其它进程可以将同一段共享内存连接(attach)到自己的地址空间.这是最快的进程间通信方式,但是不提供任何同步功能( ...
随机推荐
- (转)浅析Java中的访问权限控制
原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...
- Android原生游戏开发:使用JustWeEngine开发微信打飞机
使用JustWeEngine开发微信打飞机: 作者博客: 博客园 引擎地址:JustWeEngine 示例代码:EngineDemo JustWeEngine? JustWeEngine是托管在Git ...
- 转载:SqlServer数据库性能优化详解
本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...
- Java并发编程实例(synchronized)
此处用一个小程序来说明一下,逻辑是一个计数器(int i):主要的逻辑功能是,如果同步监视了资源i,则不输出i的值,但如果没有添加关键字synchronized,因为是两个线程并发执行,所以会输出i的 ...
- $(this)与this的区别
相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的 $() 这个符号,实际上这个符号在JQuery中相当于JQu ...
- Python-09-线程、进程、协程、异步IO
0. 什么是线程(thread)? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆 ...
- Python-05-常用模块
sys模块 # sys.argv # 在执行程序的时候可以给程序传参数,例如类似执行nginx检测配置文件语法功能的命令, nginx -t # mode_sys.py import sys prin ...
- jenkins 入门教程(中)
接上回继续,本文以我托管在bitbucket上的一个开源项目spring-boot-rest-framework做为演示,讲解如何创建自动化部署. 一.创建item 点击ok继续,item的详情页面很 ...
- 在CSS中定义a:link、a:visited、a:hover、a:active顺序
摘自:http://blog.snsgou.com/post-2.html 以前用CSS一直没有遇到过这个问题,在最近给一个本科同学做的项目里面.出现一些问题,搜索引擎查了一些网站和资料,发现 ...
- CSS继承的特殊性
p{color:red;} .first{color:green;} <p class="first">三年级时,我还是一个<span>胆小如鼠</s ...