黑马程序员技术交流社区
标题:
线程间的通信
[打印本页]
作者:
熊永标
时间:
2012-12-25 10:28
标题:
线程间的通信
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()在等待,那么将唤醒此对象的线程。
作者:
心弦上的景致
时间:
2012-12-29 12:45
拿走了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2