1 /*设计一个生产电脑和搬运电脑的类,要求生产出一台电脑就搬走一台电脑,
2 * 如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出来的电脑没有搬走,
3 * 则要等待电脑搬走之后再生产,并统计出生产的电脑数量
4 * */
定义电脑类
1 public class Computer
2 {
3 private String name;
4 private static int sum = 1;
5 private boolean flag = true;//设置标志位,通过标志位完成等待与唤醒的操作
6
7
8
9 public Computer(String name)
10 {
11 this.name = name;
12 }
13
14 public synchronized void set()
15 {
16 if(!flag)
17 {
18 try
19 {
20 super.wait();//等待搬运
21 }
22
23 catch (InterruptedException e)
24 {
25 e.printStackTrace();
26 }
27 }
28 try
29 {
30 Thread.sleep(1000);
31 }
32
33 catch (InterruptedException e)
34 {
35 e.printStackTrace();
36 }
37
38 System.out.println("生产了"+this.name+",现在已经生产了"+sum+"台电脑");
39 sum++;
40 flag = false;
41 super.notify();
42 }
43
44 public synchronized void get()
45 {
46 if(flag)
47 {
48 try
49 {
50 super.wait();//等待生产
51 }
52
53 catch (InterruptedException e)
54 {
55 e.printStackTrace();
56 }
57 }
58
59 try
60 {
61 Thread.sleep(1000);
62 }
63
64 catch (InterruptedException e)
65 {
66 e.printStackTrace();
67 }
68
69 System.out.println("搬走了"+this.name+"");
70 flag = true;
71 super.notify();
72 }
73 }
实现runnable接口
1 public class ThreadCom implements Runnable
2 {
3 public void run()
4 {
5 for(int i=0;i<10;i++)
6 {
7 Computer c = new Computer("电脑"+i);
8 c.set();
9 c.get();
10 }
11 }
12 }
1 public class Test
2 {
3 public static void main(String[] args)
4 {
5 ThreadCom t1 = new ThreadCom();
6 new Thread(t1).start();
7
8
9 }
10 }
生产了电脑0,现在已经生产了1台电脑
搬走了电脑0
生产了电脑1,现在已经生产了2台电脑
搬走了电脑1
生产了电脑2,现在已经生产了3台电脑
搬走了电脑2
生产了电脑3,现在已经生产了4台电脑
搬走了电脑3
生产了电脑4,现在已经生产了5台电脑
搬走了电脑4
生产了电脑5,现在已经生产了6台电脑
搬走了电脑5
生产了电脑6,现在已经生产了7台电脑
搬走了电脑6
生产了电脑7,现在已经生产了8台电脑
搬走了电脑7
生产了电脑8,现在已经生产了9台电脑
搬走了电脑8
生产了电脑9,现在已经生产了10台电脑
搬走了电脑9