//生产
package test_produce;
public class Produce implements Runnable{
Stack_used su;
public Produce(){}
public Produce(Stack_used su){
this.su = su;
}
//这里以生产100次为例
public void run(){
for(int i = 0; i < 100; i++){
su.pushOne(i);
}
}
}
//消费
package test_produce;
public class Consume implements Runnable{
Stack_used su;
public Consume(){}
public Consume(Stack_used su){
this.su = su;
}
public void run(){
for(int i = 0; i < 100; i++){
su.popOne();
}
}
}
//栈实现
package test_produce;
import java.util.Stack;
public class Stack_used {
public static final int SIZE = 5;//定义生产上限
Stack<Integer> stack ;
public Stack_used(){
super();
}
public Stack_used(Stack<Integer> stack){
this();
this.stack = stack;
}
public void pushOne(int n){
synchronized(this){
if(stack.size() >= Stack_used.SIZE){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Produce:"+stack.push(n));
//小睡一会,使结果明显一点
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
notifyAll();
}
}
public void popOne(){
synchronized(this){
if(stack.isEmpty()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("--Consume:"+stack.pop());
//小睡一会,使结果明显一点
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
notifyAll();
}
}
}
//测试
package test_produce;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
Stack_used su = new Stack_used(new Stack<Integer>());
Produce produce = new Produce(su);
Consume consume = new Consume(su);
new Thread(produce).start();
new Thread(consume).start();
}
}
/*
//部分结果...
Produce:0
Produce:1
Produce:2
Produce:3
Produce:4
--Consume:4
Produce:5
--Consume:5
--Consume:3
--Consume:2
--Consume:1
--Consume:0
Produce:6
Produce:7
Produce:8
Produce:9
--Consume:9
--Consume:8
--Consume:7
Produce:10
Produce:11
Produce:12
Produce:13
--Consume:13
--Consume:12
--Consume:11
--Consume:10
Produce:14
Produce:15
Produce:16
Produce:17
--Consume:17
--Consume:16
--Consume:15
--Consume:14
--Consume:6
Produce:18
Produce:19
--Consume:19
--Consume:18
...
*/
分享到:
相关推荐
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) ...
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...
因为线程各类数据都在栈中,而对象数据都在堆中所以可以实现两个线程在同一个对象代码块里面操作(临界区)。一个设置,一个拿取出。在setThread还未将数据写入时,getThread进行wait操作直到setThread进行notifuall...
生产者-消费者模式 中断的处理策略 传递InterruptedException 恢复中断,让更高层的代码处理 PriorityQueue(非并发) ConcurrentSkipListMap 替代同步的SortedMap ...
│ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...
│ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...
5.3 阻塞队列和生产者-消费者模式 5.3.1 示例:桌面搜索 5.3.2 串行线程封闭 5.3.3 双端队列与工作密取 5.4 阻塞方法与中断方法 5.5 同步工具类 5.5.1 闭锁 5.5.2 FutureTask 5.5.3 信号量 5.5.4 栅栏 5.6...
5.3 阻塞队列和生产者-消费者模式 5.3.1 示例:桌面搜索 5.3.2 串行线程封闭 5.3.3 双端队列与工作密取 5.4 阻塞方法与中断方法 5.5 同步工具类 5.5.1 闭锁 5.5.2 FutureTask 5.5.3 信号量 5.5.4 栅栏 5.6...
NIO(通道,缓冲区,选择器) Java服务器端开发面试题篇2 thread, start(), run() 多线程里面的关键字,wait, notfiy, 锁(synchronized), lock接口 线程状态,上下文切换,守护线程 消费者和生产者的几种实现方式,...
java lru leetcode 面试题刷题,java基础知识 该仓库作为个人刷题的题目记录仓库,包含剑指Offer上的全部面试题...还包括一些java基础知识,多线程,阻塞队列实现的生产者消费者模式,缓存 单例模式,动态代理模式等。
16.4.5 “生产者-消费者”案例的实际运行 365 16.4.6 notify方法的使用 366 16.4.7 同步的语句块 367 16.4.8 线程的死锁 369 16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在...
E:. │ 1.txt │ ├─千锋Python教程:第01章 第一个Python程序与数据存储及数据类型(9集) │ │ .DS_Store │ │ │ ├─code │ │ 1、数据存储.txt ...继承的实现&继承体系&栈和队列&python2;.2之前的...
实例135 模拟生产者与消费者 392 实例136 仿迅雷下载文件 396 第15章 图形编程 403 实例137 多变的按钮 403 实例138 自制对话框 405 实例139 模仿QQ空间的电子相册 409 实例140 会动的七彩文字 413 实例141 ...