1、简单的小例子:

   下面这个例子主要观察的是:

        一个对象的wait()和notify()使用情况!

    当一个对象调用了wait(),那么当前掌握该对象锁标记的线程,就会让出CPU的使用权,转而进入该对象的等待池中等待唤醒,这里说明一下,每一个对象都有一个独立的等待池和锁池!

    等待池:上述的wait()后的线程会进入等待池中,处于下图线程声明周期(简单示意图)

    中的这个状态,等待池中的线程任然具有对象的锁标记,但是处于休眠状态,不是可运行状态!

    当该对象调用notify方法之后,就会在等待池中系统会选择一个线程被唤醒,等待队列中的这个线程释放,此线程进入锁池状态。被唤醒的线程就会转换状态,

从等待的休眠状态--->可运行状态,借着参与CPU的使用权的争夺!

 package cn.sxt.runnables;

 import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;
/**
* 简单的生产者和消费者模型:
* @author 小风微灵
*
*/ /**
* 产品类
* @author 小风微灵
*
*/
class Product{ String name; //名称 float price; //价格 boolean isTrue=false;// 是否开始生产 }
/**
* 生产者类
* @author 小风微灵
*
*/
class Sale extends Thread{ private Product p=null; public Sale(Product p){
this.p=p;
} public void run() {
int i=0;
while(true){
synchronized (p) {
if(p.isTrue==false){ if(i%2==0){
p.name="西红柿";
p.price=4;
System.out.println("生产者生产了:西红柿,价格:4¥");
}else{
p.name="黄瓜";
p.price=2.5f;
System.out.println("生产者生产了:黄瓜,价格:2.5¥");
}
p.isTrue=true;
i++; }else{
try {
p.wait(); //生产暂停,开始消费
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
} } class Custom extends Thread{
private Product p=null; public Custom(Product p){
this.p=p;
} public void run() { while(true){
synchronized (p) {
if(p.isTrue){ System.out.println("消费者生产了:"+p.name+",价格:"+p.price+"¥"); p.isTrue=false;
}else{
p.notify(); //消费暂停,开始生产
}
}
}
}
} public class Producer_Custom { public static void main(String[] args) { Product p=new Product(); Sale sale=new Sale(p);
sale.start();
Custom custom=new Custom(p);
custom.start();
} }

运行结果:

生产者生产了:西红柿,价格:4¥
消费者生产了:西红柿,价格:4.0¥
生产者生产了:黄瓜,价格:2.5¥
消费者生产了:黄瓜,价格:2.5¥
生产者生产了:西红柿,价格:4¥
消费者生产了:西红柿,价格:4.0¥

Java线程(学习整理)--4---一个简单的生产者、消费者模型的更多相关文章

  1. 使用队列queue实现一个简单的生产者消费者模型

    一.生产者消费者模型 我们去超市商店等地购买商品时,我们大部分人都会说自己是消费者,而超市的各大供货商.工厂等,自然而然地也就成了我们的生产者.如此一来,生产者有了,消费者也有了,那么将二者联系起来的 ...

  2. Python-生成器实现简单的"生产者消费者"模型

    一.使用生成器实现简单的生产者消费者模型, 1.效果截屏 代码如下: import time def consumer(name): print('%s 开始买手机' %name) while Tru ...

  3. day34 python学习 守护进程,线程,互斥锁,信号量,生产者消费者模型,

    六 守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 #1.对主进程来说,运行完毕指的是主进程代码运行完毕 #2.对主线程来说,运行完 ...

  4. 多线程学习-基础(十二)生产者消费者模型:wait(),sleep(),notify()实现

    一.多线程模型一:生产者消费者模型   (1)模型图:(从网上找的图,清晰明了) (2)生产者消费者模型原理说明: 这个模型核心是围绕着一个“仓库”的概念,生产者消费者都是围绕着:“仓库”来进行操作, ...

  5. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  6. Java多线程(十):BlockingQueue实现生产者消费者模型

    BlockingQueue BlockingQueue.解决了多线程中,如何高效安全"传输"数据的问题.程序员无需关心什么时候阻塞线程,什么时候唤醒线程,该唤醒哪个线程. 方法介绍 ...

  7. Java线程学习笔记(一个)

    一个.正在创建的线程: 老掉牙的话题了.继承 java.lang.Thread父类或者实现Runnalbe接口.这里就提一句: class Thread implements Runnable Thr ...

  8. Java多线程学习——wait方法(管道法/生产者消费者模式)

    简单介绍管道法: 生产者生产数据输送到管道,消费者从管道拿出数据,管道为空消费者等待,管道满生产者生产,消费者消费生产者生产,生产者生产消费者消费. public class Corn { //要生产 ...

  9. Java多线程学习——wait方法(信号灯法/生产者消费者模式)

    信号灯法:以一个标志位来判断是否执行还是等待 public class TV { private String voice; //内容 private boolean flag=false; //信号 ...

  10. Java 实现生产者 – 消费者模型

    转自:http://www.importnew.com/27063.html 考查Java的并发编程时,手写“生产者-消费者模型”是一个经典问题.有如下几个考点: 对Java并发模型的理解 对Java ...

随机推荐

  1. .net framework client profile

    .NET Framework Client Profile The .NET Client Profile is a subset of the .NET Framework, which was p ...

  2. MFS学习总结

    MFS学习总结 MFS概述.特性和新版改进 MFS 工作原理和设计架构 MFS的安装.部署.配置 MFS的高级特性 MFS的性能测试 MFS集群的维护 MFS的常见问题和建议对策 一.MFS概述.特性 ...

  3. 转 -- MVC+EF easyui dataGrid 动态加载分页表格

    首先上javascript的代码 <script type="text/javascript"> $(function () { LoadGrid(); }) //加载 ...

  4. 实现自己的脚本语言ngscript之三:语法设计

    这是第四篇了,之所以隔了这么久才写,一方面是因为最近开始实习了,另一方面是因为设计语法真是要考虑很多东西. 于是我去读了这本书,里面实现了两种语言,一种跟js差不多语法,用ast解释执行:另一种语法类 ...

  5. 第二十三章、软件安装: RPM, SRPM 与 YUM 功能

    SRPM 的使用 : rpmbuild 包含Source code 的 SRPM 新版的 rpm 已经将 RPM 与 SRPM 的命令分开了,SRPM 使用的是 rpmbuild 这个命令,而不是 r ...

  6. 2014 牡丹江现场赛 i题 (zoj 3827 Information Entropy)

    I - Information Entropy Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %l ...

  7. 408. Valid Word Abbreviation

    感冒之后 睡了2天觉 现在痊愈了 重启刷题进程.. Google的题,E难度.. 比较的方法很多,应该是为后面的题铺垫的. 题不难,做对不容易,edge cases很多,修修改改好多次,写完发现是一坨 ...

  8. delphi tidhttp 超时的解决方案

    现在delphi都发布到xe10.1了,tidhttp还有缺陷,那就是超时设置在没有网络或者连不上服务器的时候是无效的,不管你设置为多少都要10-20秒.connectTimeout和readTime ...

  9. hive运行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:

    hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Jo ...

  10. android 55

    智能家居:可以联网可以用指令操作可以返回状态.智能微波炉智能眼镜智能手表. Android作者Andy Rubin,2007年正式由谷歌推广,开源的. 安卓体系结构和开发一个闹钟的调用结构图: 安卓和 ...