本帖最后由 杨震 于 2012-9-9 12:07 编辑
class Synch implements Runnable
{
private int x=100;
Object obj=new Object();
public boolean flag=true;
public void run()
{
if(flag)
while(true)
{
synchronized(obj)
{
show();
}
}
else
while(true)
show();
}
public synchronized void show()
{
synchronized(obj)
{
if(x>0)System.out.println(Thread.currentThread().getName()+"....."+x--);
}
}
}
class SynchDemo
{
public static void main(String[] args)
{
Synch sh=new Synch();
Thread t1=new Thread(sh);
Thread t2=new Thread(sh);
t1.start();
Thread.sleep(100);//这里让主线程暂停一会,这时t1会运行,此时flag为true;然后到t2运行时,flag已经为false,这时两个线程就执行了不同的代码,就会死锁;如果没有这个暂停,你讲的那种情况是存在的
sh.flag=false; //这里通过控制标志位来实现线程运行两段不同的代码。
t2.start();
}
} |