标签:
wait
notify ()
nitifyAll ()
都使用在同步中,因为要对持有监视器(锁)的线程操作
所以要使用在同步中,因为只有同步才具有锁
为什么这些操作线程的方法要定义object类中呢
因为这些方法在操作同步中线程时。都必须要标识他们所操作线程只有的锁
只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒
不可以对不同锁中的线程进行唤醒
也就是说,等待和唤醒必须是同一个锁
而锁可以使任意对象,所以可以被任意对象调用的方法定义object类中
1 class Res 2 { 3 String name; 4 String sex; 5 boolean flag = false; 6 } 7 8 class Input implements Runnable 9 { 10 private Res r ; 11 Input (Res r){ 12 this.r = r; 13 } 14 public void run (){ 15 int x = 0; 16 while (true) 17 { 18 synchronized (r) { 19 if (r.flag) 20 try {r.wait();}catch(Exception e){} 21 if (x==0){ 22 r.name = "java"; 23 r.sex = "man"; 24 } 25 else 26 { 27 r.name = "杰克"; 28 r.sex = "女女vn"; 29 30 } 31 x = (x+1)%2; 32 r.flag = true; 33 r.notify(); 34 35 } 36 } 37 38 } 39 40 } 41 42 43 44 class Output implements Runnable 45 { 46 private Res r; 47 Output (Res r){ 48 49 this.r = r; 50 } 51 public void run (){ 52 while (true){ 53 synchronized(r){ 54 55 if (!r.flag) 56 57 try {r.wait();}catch (Exception e){} 58 System.out.println (r.name+"..."+r.sex); 59 r.flag = false; 60 r.notify(); 61 62 } 63 } 64 65 } 66 67 } 68 69 public class InputOutputDemo { 70 71 public static void main(String[] args) { 72 // TODO Auto-generated method stub 73 74 System.out.println ("ddddd"); 75 Res r = new Res (); 76 Input input = new Input (r); 77 Output output = new Output (r); 78 79 80 Thread t1 = new Thread (input); 81 Thread t2 = new Thread (output); 82 t1.start(); 83 t2.start(); 84 } 85 86 }
标签:
原文地址:http://www.cnblogs.com/machao/p/4604439.html