Java整理代码20170807
来源:互联网 发布:程序员离职前放木马 编辑:程序博客网 时间:2024/06/04 20:08
生产者消费者模式代码实例
利用wait,notify,synchronized和多线程方法实现简单的生产者消费者模式,Java语言,JDK1.8,eclipse
package javaTest;/** * @ClassName: Production * @Description: TODO 共享资源类* @author Qiongjie* @date 17-08-07 4:07:00 PM*/class Production{ private int i= -1;//产品标识id private String name = "unknown";//产品名字 private boolean isFull=false;//产品队列是否有产品 /** * @Title: produce * @date 17-08-07 4:07:34 PM * @Description: TODO 生产产品 * @throws Exception */ public synchronized void produce() throws Exception{ //生产(放入缓冲区)wait要么放在最前,要么最后 System.out.println("isFull=false开始不断生产..."); Thread.sleep(3);//模拟生产,sleep不释放锁 isFull=true;//模拟产品队列已满 System.out.println("isFull=true产品队列满了"+"\n"); notify();//唤醒其他线程,但没有释放锁 if(isFull) {//判断产品队列是否已满 wait();//释放锁,进入等待态等待被唤醒 } } /** * @Title: consume * @date 17-08-07 4:07:56 PM * @Description: TODO 消费产品 * @throws Exception */ public synchronized void consume() throws Exception{ //消费(放入缓冲区)wait要么放在最前,要么最后 System.out.println("isFull=true开始不断消费..."); Thread.sleep(3000);//模拟消费,sleep不释放锁 isFull=false;//模拟产品队列已消费完 System.out.println("isFull=false产品队列消费完了"+"\n"); notify();//唤醒其他线程,但没有释放锁 if(!isFull) {//判断产品队列是否已消费完 wait();//释放锁,进入等待态等待被唤醒 } }}/** * @ClassName: Producer * @Description: TODO生产线程 * @author Qiongjie* @date 17-08-07 4:08:19 PM*/class Producer implements Runnable{ Production production; /** * <p>构造函数: Producer</p> * <p>Description: 传入公共资源对象</p> * @param production */ public Producer(Production production) { // TODO 传入公共资源对象 this.production=production; } public void run() { while(true) { try { production.produce(); } catch (Exception e) { e.printStackTrace(); } } }}/** * @ClassName: Consumer * @Description: TODO 消费线程* @author Qiongjie* @date 17-08-07 4:16:42 PM*/class Consumer implements Runnable{ Production production; /** * <p>构造函数: Consumer</p> * <p>Description: 传入公共资源对象</p> * @param production */ public Consumer(Production production) { // TODO 传入公共资源对象 this.production=production; } public void run() { while (true) { try { production.consume(); } catch (Exception e) { e.printStackTrace(); } } }}/** * @ClassName: Test * @Description: TODO 运行测试类* @author Qiongjie* @date 17-08-07 4:06:56 PM*/public class Test { public static void main(String[] args) { Production production=new Production();//创建公共资源 new Thread(new Producer(production)).start();//利用公共资源创建生产线程并启动 new Thread(new Consumer(production)).start();//利用公共资源创建消费线程并启动 }}
阅读全文
0 0
- Java整理代码20170807
- 整理java代码常见应用
- 整理java代码常见应用
- java代码审查常见错误整理
- DOS命令下执行Java代码 整理
- java的各种排序算法代码整理
- JAVA代码编写的建议以及整理
- java ---输入输出流操作(代码整理)
- 微信红包JAVA代码整理
- 写java代码经验整理-持续更新
- 【Java】HttpClient 使用(代码整理)
- java学习整理20170807
- 代码整理
- 代码整理
- Java代码注释规范_动力节点Java学院整理
- 从 Java 代码调用 C/C++ (整理自IBM在线教程)
- 从 Java 代码调用 C/C++ (整理自IBM在线教程)
- Java基础:技术人常见十大代码错误整理
- 从零开始学习OpenWrt完美教程
- qtcreator远程调试arm程序通过ssh
- 【hdu 1257】最少拦截系统(LIS最长上升子序列)
- mysql 增加和删除用户的访问权限和删除
- 使用ImageMagick对图片进行全面压缩
- Java整理代码20170807
- webpack代码分割(https://webpack.js.org/guides/code-splitting/)
- 使用PHPMailer发送带附件并支持HTML内容的邮件
- 深度学习简介
- JS&jQuery高级04(数组的遍历)
- 在Hibernate中使用@lob修饰大数据类型的属性
- 解决页面下载文件,资源不存在页面出现空白的问题。
- Python学习路线
- 算法学习(一)——分治策略之最大子数组问题(Java实现)