/* 
    第十二天   多线程 
   01  线程间通信(示例代码)  02 解决安全问题 
  
 无论是售票还是存钱的例子,开启的线程所运行的代码是一致的。 
 拉煤的例子,一个送,一个拉,同时进行的。动作不一致,运行代码不一致。 
 所以要有两个run方法来存放数据,放在两个类中。 
 线程间通讯:就是多个线程操作同一个资源,但是操作的动作不同。 
*/ 
class Rec 
{ 
 String name; 
 String sex; 
} 
class Input implements Runnable 
{ 
 Rec r; 
 Input(Rec r) 
 { 
  this.r = r; 
 } 
 public void run() 
 { 
  int x =0; 
  while (true) 
  { 
   synchronized(r) 
   { 
    if(x==0) 
    { 
     r.name = "mike"; 
     r.sex = "man"; 
    } 
    else 
    { 
     r.name = "丽丽"; 
     r.sex = "女女女女女"; 
    } 
    x = (x+1)%2; 
   } 
  } 
 } 
} 
class Output implements Runnable 
{ 
 Rec r; 
 Output(Rec r) 
 { 
  this.r = r; 
 } 
 public void run() 
 { 
  synchronized(r) 
  { 
   System.out.println(r.name+"::::"+r.sex); 
  } 
 } 
} 
class  ThreadDemo1 
{ 
 public static void main(String[] args)  
 { 
  Rec r = new Rec(); 
  Input in = new Input(r); 
  Output out = new Output(r); 
  Thread t1 = new Thread(in); 
  Thread t2 = new Thread(out); 
  t1.start(); 
  t2.start(); 
 } 
} 
 
 |