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