publicclassTraditionalThreadCommunication{publicstaticvoidmain(String[]args){finalBusinessbusiness=newBusiness();newThread(newRunnable(){@Overridepublicvoidrun(){for(inti...
public class TraditionalThreadCommunication
{
public static void main(String[] args)
{
final Business business = new Business();
new Thread(new Runnable()
{
@Override
public void run()
{
for (int i = 1; i <= 50; i++)
{
business.sub(i);
}
}
}).start();
for (int i = 1; i <= 50; i++)
{
business.main(i);
}
}
}
class Business
{
private boolean bShouldSub = true;
public synchronized void sub(int i)
{
while(!bShouldSub)
{
try
{
this.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
for (int j = 1; j <= 10; j++)
{
System.out.println("sub thread sequence of " + j + ",loop of " + i);
}
bShouldSub = false;
this.notify();
}
public synchronized void main(int i)
{
while(bShouldSub)
{
try
{
this.wait();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int j = 1; j <= 100; j++)
{
System.out.println("main thread sequence of " + j + ",loop of " + i);
}
bShouldSub = true;
this.notify();
}
}
关于这个程序,我想知道一个被wait后,即使它被notify,它后面的大段代码是不是也不会再执行了,而是重新开始执行run方法体?
另外如果两个线程共享同一个对象变量,该对象变量中有两个synchronized修饰的方法,两个线程各访问一个,如果用一个boolean那样判断wait的话,是不是一个线程wait后,就把该对象变量的锁释放了,这样好让另一个线程继续运行?
展开