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. 【异步编程】when.js

    异步编程:When.js快速上手 var api = 'http://qgy18.imququ.com/file/when/d.php?cb=?'; var getData = function() ...

  2. 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件

     发布于 2014-07-14 作者 陈 忠岳 今天,微软公司加入开放计算项目(OCP),贡献出硬件和软件规范,管理 API 和协议,机械 CAD 模型,以及电路板文件和 Gerbers(描述印刷 ...

  3. Learn Objectvie-C on the Mac 2nd Edition 笔记

    Chapter 1Apple’s Cocoa (for OS X) 和 Cocoa Touch (for iOS) toolkits 都是用 Objective-C写的. Chapter 2 (1)  ...

  4. HDOJ1175连连看 DFS

    连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  5. UVA 11762 Race to 1(记忆化+期望)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20869 [思路] DP+期望. 设f[x]表示从x转移到1的期望操 ...

  6. Inheritance - SGU 129(线段与多边形相交的长度)

    题目大意:给一个凸多边形(点不是按顺序给的),然后计算给出的线段在这个凸多边形里面的长度,如果在边界不计算. 分析:WA2..WA3...WA4..WA11...WA的无话可说,总之细节一定考虑清楚, ...

  7. uva10829 L-Gap Substrings

    题意 给出一个长度为\(n(\leqslant 50000)\)的字符串,求形如\(\mathrm{UVU}\)形式的字串,其中\(\mathrm{V}\)的长度给定. 题解 枚举\(\mathrm{ ...

  8. poj 2462 Period of an Infinite Binary Expansion

    欧拉定理.根据分数转换成2进制的过程,分子每次都乘2.对于循环节x,当2^x = 1(mod b)时肯定是循环节.显然当分母不能整除2的时候,即分母和2互质的话,就可以利用欧拉定理,使得2^(Eule ...

  9. java基础之 IO流

    javaIO流   IO流 : (input  output) 输入输出流 :输入 :将文件读到内存中 输出:将文件从内存输出到其他地方.   IO技术的作用:主要就是解决设备和设备之间的数据传输问题 ...

  10. iOS开发总结-搜索功能实现--使用SKTag

    TagsTableViewController.h 文件 #import <UIKit/UIKit.h> #import "personSearch.h" @inter ...