(多线程)ProducerCustomerDemo

来源:互联网 发布:linux查看数据库命令 编辑:程序博客网 时间:2024/06/09 18:52
package duoxiancheng;//多生产者消费者(多条线程输入,多条线程输出)class ResP{private String name;private int count=1 ;private boolean flag=false;public synchronized void set(String name){while(flag)//每次等待都要判断,if会发生不判断直接执行的情况try {this.wait();} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}this.name=name+"+++"+count++;System.out.println(Thread.currentThread().getName()+"..."+this.name);this.flag=true;this.notifyAll();//每次唤醒所有线程,防止线程全部等待而冻结}public synchronized void out(){while(!flag)try {this.wait();} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"...***"+this.name);this.flag=false;this.notifyAll();//注意:此处要加this}}class Producer implements Runnable{ResP r;Producer(ResP r){this.r=r;}public void run(){while(true)r.set("goods");}}class Customer implements Runnable{ResP r;Customer(ResP r){this.r=r;}public void run(){while(true)r.out();}}public class ProducerCustomerDemo {public static void main(String [] args){ResP r=new ResP();new Thread(new Producer(r)).start();new Thread(new Producer(r)).start();new Thread(new Customer(r)).start();new Thread(new Customer(r)).start();}}

0 0
原创粉丝点击