JavaSE 基础 第62节 生产者消费者模型
2016-07-02 17:46
387 查看
2016-07-02
【参考资料】
[1] Java轻松入门经典教程【完整版】
package com.java1995; import java.util.List; /** * 生产者 * * @author Administrator * */ public class Producer extends Thread { private List<Integer> list; private int max; // 构造方法 public Producer(String name, int max, List<Integer> list) { super(name); this.max = max; this.list = list; } public void run() { while (true) { synchronized (list) { while (list.size() == max) { System.out.println("仓库已满"); try { list.wait();// 线程挂起 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 后面的程序 int num = (int) (Math.random() * 100); list.add(num); System.out.println(this.getName() + "生产了:" + num); // 生产者通知消费者有库存,可以消费 list.notifyAll(); } } } }
package com.java1995; import java.util.List; /** * 消费者 * * @author Administrator * */ public class Consumer extends Thread { private List<Integer> list; private int max; public Consumer(String name, int max, List<Integer> list) { super(name); this.max = max; this.list = list; } public void run() { while (true) { synchronized (list) { while (list.isEmpty()) { System.out.println("仓库空了"); try { list.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(this.getName() + "正在消费:" + list.get(list.size() - 1)); list.remove(list.size() - 1); // 消费者通知生产者,仓库已空 list.notifyAll(); ; } } } }
package com.java1995; import java.util.ArrayList; import java.util.List; /** * 测试类 * * @author Administrator * */ public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); int max = 100; Producer p = new Producer("生产者", max, list); Consumer c = new Consumer("消费者", max, list); p.start(); c.start(); } }
【参考资料】
[1] Java轻松入门经典教程【完整版】
相关文章推荐
- ContextLoaderListener和Spring MVC中的DispatcherServlet学习 随手记
- Java-类库-Guava-Immutable(不可变)集合
- Java基础之(二) 类与对象
- Spring MVC 根应用上下文在Web容器中的启动及其销毁
- Java-类库-Guava-Throwables类
- Java-类库-Guava-Ordering比较器
- C移植到Java中,byte[]与其他数据类型的转换
- Spring MVC Web应用上下文
- 为什么正常安装并成功运行Genymotion模拟器但eclipse中的Genymotion却报错了?
- 八、java常用类
- MyEclipse2014如何设置默认生成Encoding为UTF-8格式的JSP文件
- java中汉字排序最简明的介绍
- SSH(Spring+SpringMVC+hibernate+Maven) 项目 使用jackson报转换异常
- Sping与hibernate和Struts的整合及使用
- springMVC的拦截器工作流程
- Java-类库-Guava-Preconditions检验参数
- mac上安装android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题
- maven 构建项目时出错 “Dynamic Web Module 3.1 requires Java 1.7 or newer” in Eclipse
- Spring MVC 使用Servlet原生API作为参数
- Java-类库-Guava