class Info{
private String name="oracle";
private String desc="数据库";
private boolean flag=false;
public synchronized void set(String name,String desc){
if(!this.flag){
try{
super.wait();
}
catch(Exception e){}
}
this.setName(name);
try{Thread.sleep(300);}
catch(Exception e){}
this.setDesc(desc);
this.flag=false;
super.notify();
}
public synchronized void get(){
if(this.flag){
try{super.wait();}
catch(Exception e){}
}
try{Thread.sleep(300);}
catch(Exception e){}
System.out.println(this.getName()+"-->"+this.getDesc());
this.flag=true;
super.notify();
}
public void setName(String name){
this.name=name;
}
public void setDesc(String desc){
this.desc=desc;
}
public String getName(){
return this.name;
}
public String getDesc(){
return this.desc;
}
}
class Pro implements Runnable{
private Info info;
public Pro(Info info){
this.info=info;
}
public void run(){
for(int x=0;x<50;x++){
if(x%2==0){
this.info.set("Java","www.sun.com");
try{
Thread.sleep(300);
}
catch(Exception e){}
}else{
this.info.set("oracle","数据库");
try{
Thread.sleep(300);
}catch(Exception e){}
}
}
}
}
class Cus implements Runnable{
private Info info;
public Cus(Info info){
this.info=info;
}
public void run(){
for(int x =0;x<50;x++){
try{
Thread.sleep(300);
}catch(Exception e){}
this.info.get();
}
}
}
public class CommDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Info info=new Info();
Pro p=new Pro(info);
Cus c=new Cus(info);
new Thread(p).start();
new Thread(c).start();
}
}