Java 多线程中的死锁问题,数据竞争所致?
在某个多线程程序中,线程A对线程B进行监控,现公布大致的代码,请大家讨论2个问题:
1、监控线程一般都是怎么来维护、操作的?
2、程序中的这种监控会不会引起数据竞争?恶性的数据竞争?甚至引起死锁?
程序如下:
public class ThreadA extend Thread
{
public boolean conti = true;
public boolean dead = false;
public void run()
{
while ( conti )
{
dead = false;
// do something
sleep( 1000 );
}
}
public void exit()
{
conti = false;
}
}
public class ThreadB extend Thread
{
public boolean conti = true;
public ThreadA ta;
public ThreadB( ThreadA ta )
{
this.ta = ta;
}
public void run()
{
while ( conti )
{
if ( ta.dead )
{
ta.exit();
// restart ta
}
ta.dead = false;
sleep( 30000 );
}
}
public void exit()
{
conti = false;
}
}
参考:多线程Java程序中常见错误的巧处理
http://software.ccidnet.com/art/322/20030410/43222_1.html