- class ThreadCommunicate
- {
- public static void main(String[] args)
- {
- Resources r=new Resources();
- Input in=new Input(r);
- Output out=new Output(r);
- Thread t1=new Thread(in);
- Thread t2=new Thread(out);
- t1.start();
- t2.start();
- }
- }
- class Resources
- {
- String name=null;
- String sax=null;
- boolean tags=false;
- }
- class Input implements Runnable
- {
- Resources r=null;
- public Input(Resources r)
- {
- this.r=r;
- }
- public void run()
- {
- int i=0;
- while(true)
- {
- synchronized(r)
- {
- if(r.tags)
- {
- try{r.wait();}catch(InterruptedException e){}
- }
- if((i%2)==0)
- {
- r.name="张三";
- r.sax="男";
- }
- else
- {
- r.name="小英";
- r.sax="女";
- }
- i++;
- r.tags=true;
- r.notify();
- }
- }
- }
- }
- class Output implements Runnable
- {
- Resources r=null;
- public Output(Resources r)
- {
- this.r=r;
- }
- public void run()
- {
- while(true)
- synchronized(r)
- {
- if(!r.tags)
- {
- try{r.wait();}catch(InterruptedException e){}
- }
- System.out.println(r.name+"......"+r.sax);
- r.tags=false;
- r.notify();
- }
- }
- }
复制代码 线程间的通信注意事项:
1、一个线程的wait()需要别外一个线程的notify()。如果一个线程没有wait()而没有notify()的话,就发生线程永远的等待,发生DeadThread。
2、一个线程的wait()需要执行wait()的对象的相应notify(),其他的不可以。
3、notify可有在没有wait()的情况下执行,不影向程序运行。如果有该对应的wait()在等待,那么将唤醒此对象的线程。
|
|