class Noname1{
public static void main(String arg[]){
Value v=new Value();
// new Thread(new Inter(v)).start();
// new Thread(new Puter(v)).start();
Inter i=new Inter(v);
Thread t=new Thread(i);
t.start();
Puter p=new Puter(v);
Thread t1=new Thread(p);
t1.start();
}
}
class Value{
private String name;
private String sex;
boolean flag=false;
public synchronized void set(String name,String sex){ //同步
if(flag)try{this.wait();}catch(Exception e){}
this.name=name;
this.sex=sex;
flag=true;
this.notify();
}
public synchronized void print(){
if(!flag)try{this.wait();}catch(Exception e){}
System.out.println(Thread.currentThread()+"name==== "+name+" "+"sex===="+sex);
flag=false;
this.notify();
}
} // 线程间的通信 通过将共同属性封装在一个类中,并各在两个线程上调用,将两个线程的内容通过该类进行传递
class Inter implements Runnable{
private boolean b=true;
private Value v;
Inter(Value v){ // 将Value类类变量 作为构造函数的参数
this.v=v;
}
public void run(){
while(true){
synchronized(v){ // 两个线程都要同步
// if(v.flag)
// try{v.wait();}catch(Exception e){} //等待 等待线程存在线程池
if(b){
v.set(" 张张张","男男男男男");
b=false;
}
else{
v.set(" 李","女");
b=true;
}
// v.flag=true;
// v.notify(); // 唤醒线程,通常唤醒第一个等待的线程
} //notifyAll();唤醒线程池所有
}
}
}
class Puter implements Runnable{
private Value v;
Puter(Value v){
this.v=v;
}
public void run(){
while(true){
synchronized(v){
// if(!v.flag)try{v.wait();}catch(Exception e){}
v.print();
// v.flag=false;
// v.notify();
}
}
}
}
|