1 package multithread4;
2
3 /*
4 * 生产者,消费者。
5 *
6 * 死锁 四个线程都等待没有被唤醒也是一种情况
7 */
8
9 class Resource2{
10 private String name;
11 private int count = 1;
12 private boolean flag = false;
13 public synchronized void set(String name) {
14
15 /*if*/ while (flag) {
16 try {
17 this.wait();
18 } catch (InterruptedException e) {
19
20 }
21 }
22 this.name = name + count;
23 count++;
24 System.out.println(Thread.currentThread().getName()+"..生产者.."+this.name);
25 flag = true;
26 notify();
27 }
28 public synchronized void out() {
29 /*if*/ while (!flag) {
30 try {
31 this.wait();
32 } catch (InterruptedException e) {
33
34 }
35 }
36 System.out.println(Thread.currentThread().getName()+"..消费者......"+this.name);
37 flag = false;
38 notify();
39 }
40 }
41
42 class Producer implements Runnable{
43 private Resource2 r;
44 public Producer(Resource2 r) {
45 this.r = r;
46 }
47 public void run() {
48 while(true) {
49 r.set("烤鸭");
50 }
51 }
52 }
53 class Consumer implements Runnable{
54 private Resource2 r;
55 public Consumer(Resource2 r) {
56 this.r = r;
57 }
58 public void run() {
59 while(true) {
60 r.out();
61 }
62 }
63 }
64 public class ProducerConsumerDemo {
65
66 public static void main(String[] args) {
67
68 Resource2 r = new Resource2();
69 Producer pro = new Producer(r);
70 Consumer con = new Consumer(r);
71
72 Thread t0 = new Thread(pro);
73 Thread t1 = new Thread(pro);
74 Thread t2 = new Thread(con);
75 Thread t3 = new Thread(con);
76
77 t0.start();
78 t1.start();
79 t2.start();
80 t3.start();
81 }
82
83 }