1 //多线程通讯 2 //多个线程处理同一资源,但是任务不同 3 //等待唤醒方法: 4 //wait():将线程变成为冻结状态,线程会被存储在线程池中; 5 //notify():唤醒线程中的一个线程(任意的) 6 //notifyAll():唤醒所有线程; 7 /**************************************************************/ 8 //建立资源类 9 class Resource 10 { 11 private boolean flag = false; 12 private String name; 13 private String sex; 14 public synchronized void set(String name,String sex) 15 { 16 if(flag) 17 try 18 { 19 this.wait(); 20 } 21 catch (InterruptedException e) 22 { 23 } 24 this.name = name; 25 this.sex = sex; 26 this.flag=true; 27 this.notify(); 28 } 29 public synchronized void get() 30 { 31 if(!this.flag) 32 try 33 { 34 this.wait(); 35 } 36 catch (InterruptedException e) 37 { 38 } 39 System.out.println(name+"--"+sex); 40 this.flag=false; 41 this.notify(); 42 } 43 } 44 //建立输入任务类 45 class Input implements Runnable 46 { 47 Resource r; 48 Input(Resource r) 49 { 50 this.r = r; 51 } 52 public void run() 53 { 54 int x = 0; 55 while(true) 56 { 57 if (x==0) 58 { 59 r.set("野兽","男 "); 60 } 61 else 62 { 63 r.set("meinv","nv "); 64 } 65 x=(x+1)%2; 66 } 67 } 68 } 69 //建立输出任务类 70 class Output implements Runnable 71 { 72 Resource r; 73 Output(Resource r) 74 { 75 this.r = r; 76 } 77 public void run() 78 { 79 while(true) 80 { 81 synchronized(r) 82 { 83 r.get(); 84 } 85 } 86 87 } 88 } 89 90 class IoDemo1 91 { 92 public static void main(String[] args) 93 { 94 //建立资源对象 95 Resource r = new Resource(); 96 //建立输入任务对象 97 Input in = new Input(r); 98 //建立输出任务对象 99 Output out = new Output(r); 100 //建立输入任务的进程 101 Thread t1 = new Thread(in); 102 //建立输出任务的进程 103 Thread t2 = new Thread(out); 104 //开启线程 105 t1.start(); 106 t2.start(); 107 } 108 }