生产者消费者问题
来源:互联网 发布:实时直播软件下载 编辑:程序博客网 时间:2024/06/05 08:41
package com.wjx.sayHello;/* * 生产者和消费者问题 * 1.首先如果是异步处理,即不加synchronized会出现数据不安全处理,出现null值奇数偶数出现错误 * 2.同步处理之后,可能会出现数据重复的问题 * 3.接着就需要对数据进行设置等待wait()和唤醒notify()操作,当数据生成时候不予许取走,当消费没结束不允许生产 */class ProvideData implements Runnable{private Data data;public ProvideData(Data data){this.data=data;}@Overridepublic void run() {for(int x=0;x<10;x++){if(x%2==0){ this.data.set("是偶数", "我喜欢偶数"); }else{this.data.set("是基数","我不喜欢奇数");}}}}class ConsumeData implements Runnable{private Data data;public ConsumeData(Data data){this.data=data;}@Overridepublic void run() {for(int x=0;x<10;x++){this.data.get();}}}class Data{private String title;private String name;private boolean flag=false;//定义一个flag,falg=true表示允许生成,不予许取走.flag=false表示生成完毕,允许取走,但是不能够生成public synchronized void set(String title,String name){if(this.flag==true){try {super.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}this.title=title;try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.name=name;this.flag=true;super.notify();}public synchronized void get(){if(this.flag==false){try {super.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(this.title+"=="+this.name);this.flag=false;super.notify();}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getName() {return name;}public void setName(String name) {this.name = name;}}public class TestDemo {public static void main(String[] args){Data data =new Data();new Thread(new ProvideData(data)).start();new Thread(new ConsumeData(data)).start();}}
阅读全文
0 1
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 操作系统:生产者-消费者问题
- 生产者与消费者问题
- 生产者-消费者问题
- 关于生产者-消费者问题
- java生产者 消费者问题
- 消费者和生产者问题
- 生产者消费者问题
- 生产者消费者问题--多线程
- 生产者-消费者同步问题
- 生产者消费者问题
- 生产者与消费者问题
- 生产者 消费者问题!
- 生产者与消费者问题
- 生产者消费者问题
- 关于生产者-消费者问题
- Jenkins
- python中的list和array的不同及Python的各种推导式
- 【iis】部署网站及其注意事项
- 日本究竟发达到什么程度?
- LeetCode编程练习
- 生产者消费者问题
- 【LeetCode】632. Smallest Range
- 在ORACLE中给已有数据的表增加、修改、删除一个字段(或一个列)或者多个字段(或多个列)的问题
- int ,long , long long类型的范围
- oracle 游标变量ref cursor详解
- bootstrap列表js
- SourceTreeSetup-2.3.1.0.exe安装登录不了或一直卡在登录问题解决
- DataGridView
- C# WPF 文件操作