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