本帖最后由 余琪琪 于 2014-6-15 23:06 编辑
- class Res
- {
- private String name;
- private int count = 1;
- //定义标记。
- private boolean flag;
- //提供了给商品赋值的方法。
- public synchronized void set(String name)
- {
- if(flag)//判断标记为true,执行wait。等待。为false。就生产。
- try{this.wait();}catch(InterruptedException e){}
- this.name = name + "--" + count;
- count++;
- System.out.println(Thread.currentThread().getName()+"...生产者....."+this.name);
- //生成完毕,将标记改为true。
- flag = true;
- //唤醒消费者。
- this.notify();
- }
- //提供一个获取商品的方法。
- public synchronized void get()
- {
- if(!flag)
- try{this.wait();}catch(InterruptedException e){}
- System.out.println(Thread.currentThread().getName()+".......消费者....."+this.name);
- //将标记改为false。
- flag = false;
- //唤醒生产者。
- this.notify();
- }
- }
- //生成者。
- class Producer implements Runnable
- {
- private Res r;
- Producer(Res r)
- {
- this.r = r;
- }
- public void run()
- {
- while(true)
- r.set("面包");
- }
- }
- //消费者
- class Consumer implements Runnable
- {
- private Res r;
- Consumer(Res r)
- {
- this.r = r;
- }
- public void run()
- {
- while(true)
- r.get();
- }
- }
- class ProducerConsumerDemo2
- {
- public static void main(String[] args)
- {
- //1,创建资源。
- Res r = new Res();
- //2,创建两个任务。
- Producer pro = new Producer(r);
- Consumer con = new Consumer(r);
- //3,创建线程。
- Thread t1 = new Thread(pro);
- Thread t2 = new Thread(con);
- t1.start();
- t2.start();
- }
- }
复制代码 |