多线程生产者和消费者例子

来源:互联网 发布:西德尼谢尔顿 知乎 编辑:程序博客网 时间:2024/05/16 05:13
/** * 多线程,生产者与消费者 * 使用多线程解决生产者和消费者问题,必须使用while循环和nitifyAll()。 * @author Again * */class ProductCustomerDemo {public static void main(String[] args) {Resource r=new Resource();Product p=new Product(r);Customer c=new Customer(r);Thread t1=new Thread(p);Thread t2=new Thread(p);Thread t3=new Thread(c);Thread t4=new Thread(c);t1.start();t2.start();t3.start();t4.start();}}class Resource{private String name;private int count=1;private boolean flag=false;/* * 生产者 */public synchronized void set(String name){while(flag){try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}this.name=name+"....."+count++;System.out.println(Thread.currentThread().getName()+"----生产者----"+this.name);flag=true;this.notifyAll();}/* * 消费者 */public synchronized void out(){while(!flag){try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(Thread.currentThread().getName()+"---------消费者---------"+this.name);flag=false;this.notifyAll();}}class Product implements Runnable{private Resource r;public Product(Resource r){this.r=r;}public void run() {while(true){r.set("商品");}}}class Customer implements Runnable{private Resource r;public Customer(Resource r){this.r=r;}public void run() {while(true){r.out();}}}

0 0
原创粉丝点击