生产者消费者 wait()。 notify()
public class ThreadDemo3 {
public static void main(String[] args){
MyList list = new MyList();
Productor p1 = new Productor(list);
Productor p2 = new Productor(list);
Productor p3 = new Productor(list);
Consumer c1 = new Consumer(list);
// Consumer c2 = new Consumer(list);
p1.start();
p2.start();
p3.start();
c1.start();
// c2.start();
}
}
class MyList {
private int MAX = 100;
private java.util.List<Integer> list = new java.util.LinkedList<Integer>();
public synchronized void addList(Integer i) {
while (list.size() >= MAX) {
try {
wait();// 进入锁对象的 等待序列,同时交出锁的控制权。他是对象的方法。//如果被唤醒,那么会接着执行改方法下面的语句。
//Thread.sleep(),sleep 是 Thread 的静态方法,只是让线程暂时休眠,不参与cpu的争夺,他与是否具有锁控制权无关,之前有锁控制权,
//那么sleep结束之后,醒来了,依旧有锁的控制权,如果之前就没有锁的控制权,那么醒来之后依旧没有锁的控制权。
}
catch (Exception e) {
}
}
list.add(i);
notify();// 由锁对象随机通知(或者说唤醒?)锁等待序列中的一个线程,告诉他,可以获得锁的控制权了,(然后带着锁控制权去争夺cpu)
//因为是随机通知等待序列中的某一个,所以,前面不能直接往list中添加东西。必须做一定的处理。
System.out.println("productor.size======>>>>>>> "+ list.size());
}
public synchronized int removeList() {
while (list.size() == 0) {
try {
wait();
}
catch (Exception e) {
}
}
int result = list.remove(0);
notify();
System.out.println("customer===>>>>> "+list.size());
return result;
}
}
//生产者
class Productor extends Thread{
private static int I = 1;
private MyList list;
public Productor(MyList list){
this.list = list;
}
public void run(){
while(true){
list.addList(I);
System.out.println(I);
I ++;
}
}
}
//消费者
class Consumer extends Thread{
private int i;
private MyList list;
public Consumer(MyList list){
this.list = list;
}
public void run(){
while(true){
i = list.removeList();
System.out.println(i);
}
}
}
生产者消费者 wait()。 notify()的更多相关文章
- 通过生产者消费者模式例子讲解Java基类方法wait、notify、notifyAll
wait(),notify()和notifyAll()都是Java基类java.lang.Object的方法. 通俗解释wait():在当前线程等待其它线程唤醒.notify(): 唤醒一个线程正在等 ...
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视.本文对这些关键字的使用进行了描述. 在 Java 中可以用 wait ...
- java多线程15 :wait()和notify() 的生产者/消费者模式
什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制.生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: ...
- 生产者消费者模型——wait/notify/notifyAll使用
告警系统架构如下 1. 数据处理系统处理完原始数据并入库后,发送消息到kafka系统: 2. 告警生产者从kafka系统查询消息存入告警消息队列: 3. 告警消费者从告警消息队列查询消息进行处理. 这 ...
- Java 中 wait, notify 和 notifyAll的正确使用 – 以生产者消费者模型为例
如何使用Wait 尽管关于wait和notify的概念很基础,它们也都是Object类的函数,但用它们来写代码却并不简单.如果你在面试中让应聘者来手写代码,用wait和notify解决生产者消费者问题 ...
- 多线程学习-基础(十二)生产者消费者模型:wait(),sleep(),notify()实现
一.多线程模型一:生产者消费者模型 (1)模型图:(从网上找的图,清晰明了) (2)生产者消费者模型原理说明: 这个模型核心是围绕着一个“仓库”的概念,生产者消费者都是围绕着:“仓库”来进行操作, ...
- wait、notify应用场景(生产者-消费者模式)
Java实现生产者消费者的方式有:wait && notify.BlockingQueue.Lock && Condition等 wait.notify注意事项:(1) ...
- (三)(2)wait/notify实现生产者-消费者模型,join方法
生产者,消费者模型 举个例子来说明,厨师,服务员,厨师做菜,服务员上菜,如果厨师没有做好菜,那么服务员就无法上菜,厨师做好了菜,然后通知服务员消费(上菜).在这个过程之中,厨师扮演的就是生产者,服务员 ...
- synchronized wait notify 生产者消费者
1.生产者消费者模型 public class ProducterConsumerTest{ public static void main(String[] args){ System.out.pr ...
- 母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列
简介 多线程通信一直是高频面试考点,有些面试官可能要求现场手写生产者/消费者代码来考察多线程的功底,今天我们以实际生活中母鸡下蛋案例用代码剖析下实现过程.母鸡在鸡窝下蛋了,叫练从鸡窝里把鸡蛋拿出来这个 ...
随机推荐
- shiro 身份验证
shiro身份验证: 参考链接:http://jinnianshilongnian.iteye.com/blog/2019547 即在应用中证明是本人进行操作,一般通过用户名来证明 在shiro中,用 ...
- es6(16)--Decorator
//Decorator:修饰器,是一个函数用来修改类的行为 { //只读 let readonly=function(target,name,descriptor){ descriptor.writa ...
- Java并发知识整理
整理了一下前段时间学习Java并发的笔记,大约有40篇. 1. Java并发基础知识 并发基础(一) 线程介绍 并发基础(二) Thread类的API总结 并发基础(三) java线程优先级 并发基础 ...
- 【Linux】【Jmeter】配置Jmeter服务器和运行Jmeter
以前整理过Linux下的Jmeter知识,所以此处看可以参考以下链接: 参考链接:http://www.cnblogs.com/conquerorren/p/7880604.html [root@-- ...
- SLD Related Gateway Serivces Unavaliable
SAP NW 7.4 default switched on the ACL (access control list) in gateway service, so only local acces ...
- 关于 Glassfish
GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发.部署和重新分发.开发者可以免费获得源代码,还可以对代码进行更改 GlassFish 是用于构建 Java EE 5应 ...
- PHP微信公共号自定义菜单。
/**微信生成菜单 * [addMennu description] */ public function addMennu(){ $token = $this->getToken(); $ur ...
- Android悬浮窗及其拖动事件
主页面布局很简单,只有一个RelativelyLayout <?xml version="1.0" encoding="utf-8"?> <R ...
- 【JAVA】POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
POI设置EXCEL单元格格式为文本.小数.百分比.货币.日期.科学计数法和中文大写 博客分类:,本文内容转自 http://javacrazyer.iteye.com/blog/894850 FIL ...
- CentOS7 安装 Mongodb 与 NodeJs 主要心得
一.mongodb 1.安装 由于使用yum源下载安装总是超时,所以选择了tarball方式安装. 官方安装方法链接,https://docs.mongodb.com/manual/tutorial/ ...