多线程 wait(),notify()方法,案例总结
来源:互联网 发布:小学试题库软件下载 编辑:程序博客网 时间:2024/05/16 05:49
废话不多说,案例如下
1 package com.xujingyang.Exok; 2 3 /** 4 * 商品类 5 * @author 徐景洋 6 */ 7 public class Goods { 8 private String pinpai; 9 private String name;10 11 private int num;12 13 public int getNum() {14 return num;15 }16 public void setNum(int num) {17 this.num = num;18 }19 public String getPinpai() {20 return pinpai;21 }22 public void setPinpai(String pinpai) {23 this.pinpai = pinpai;24 }25 public String getName() {26 return name;27 }28 public void setName(String name) {29 this.name = name;30 }31 32 }
1 package com.xujingyang.Exok; 2 3 /** 4 * 生产商类 5 * @author 徐景洋 6 */ 7 public class Producer implements Runnable { 8 private Goods goods; 9 10 public Goods getGoods() {11 return goods;12 }13 14 public void setGoods(Goods goods) {15 this.goods = goods;16 }17 18 @Override19 public void run() {20 for (int i = 0; i < 5; i++) {21 synchronized (goods) {22 if(goods.getNum()>0){23 try {24 goods.wait();//商品数量已经大于0啦,消费者要取货咯,自己就开始等待咯25 } catch (InterruptedException e) {26 e.printStackTrace();27 }28 }29 30 if (i % 2 == 0) {31 goods.setPinpai("哇哈哈");32 try {33 Thread.sleep(10);34 } catch (InterruptedException e) {35 e.printStackTrace();36 }37 goods.setName("矿泉水");38 39 } else {40 goods.setPinpai("旺仔");41 try {42 Thread.sleep(10);43 } catch (InterruptedException e) {44 e.printStackTrace();45 }46 goods.setName("小馒头");47 }48 goods.setNum((goods.getNum()+1));49 System.out.println("生产了" + goods.getPinpai() + goods.getName());50 goods.notify();//商品不够啦,自己生产完,然后通知消费者取货咯51 }52 }53 }54 55 }
1 package com.xujingyang.Exok; 2 3 /** 4 * 消费者类 5 * @author 徐景洋 6 */ 7 public class Customer implements Runnable { 8 9 private Goods goods;10 11 public Goods getGoods() {12 return goods;13 }14 15 public void setGoods(Goods goods) {16 this.goods = goods;17 }18 19 @Override20 public void run() {21 for (int i = 0; i < 5; i++) {22 synchronized (goods) {23 if(goods.getNum()<=0){24 try {//如果商品生产的数量小于0,则开始等待.只有有货才能购物嘛25 goods.wait();26 } catch (InterruptedException e) {27 e.printStackTrace();28 }29 }30 31 try {32 Thread.sleep(10);33 } catch (InterruptedException e) {34 e.printStackTrace();35 }36 goods.setNum((goods.getNum()-1));37 System.out.println("取走了" + goods.getPinpai() + goods.getName());38 goods.notify();//取走之后通知生产商继续生产商品(唤醒在对象锁等待池中的线程继续执行)39 }40 }41 }42 43 }
1 package com.xujingyang.Exok; 2 3 /** 4 * 测试类 5 * @author 徐景洋 6 */ 7 public class Test { 8 public static void main(String[] args) { 9 Goods goods=new Goods();10 11 //生产者生产商品12 Producer p=new Producer();13 p.setGoods(goods);14 15 //消费者取走商品16 Customer c=new Customer();17 c.setGoods(goods);18 19 new Thread(p).start();20 new Thread(c).start();21 }22 }
清晰明了不,嘿嘿
阅读全文
0 0
- 多线程 wait(),notify()方法,案例总结
- Java 多线程通信wait()和notify()案例
- 多线程编程 -wait(),notify()/notityAll()方法
- 多线程编程 -wait(),notify()/notityAll()方法
- 多线程编程 -wait(),notify()/notityAll()方法 .
- 多线程编程 -wait(),notify()/notityAll()方法
- 多线程—wait,notify(针对方法synchronized)
- java多线程:wait(),notify(),notifyAll()方法
- 线程锁 多线程安全 wait、notify方法
- 多线程中的wait()和notify()方法
- 初识java多线程的wait(), notify()方法
- 多线程总结(五)线程间的通信——wait及notify方法
- 多线程的wait()/notify()
- Java多线程wait/notify
- 多线程-notify和wait
- notify与wait案例2
- Java多线程设计模式wait和notify机制总结
- 多线程同步 synchronized 以及wait notify notigyAll的总结
- Android界面绘制简单表格
- 数据可视化
- layer换行
- libevent TAILQ 源码分析
- 通过IDE生成和手动call调用webservice
- 多线程 wait(),notify()方法,案例总结
- socket多线程方式案例
- Java元注解,简单案例
- node.js---study2 连接池连接数据库实现登录注册查询用户的功能---
- web.xml监听器实现原理
- C# Bitmap 缩放拉伸
- 关于jdk1.5之后的自定拆装箱
- 常见数据库连接方式
- POJ3013 Big Christmas Tree(最短路径树,spfa)