题目:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次。
public class TraditionalThreadCommunicationTest
{
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);
}
}
static 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)
{
e.printStackTrace();
}
}
for(int j=1; j<=100; j++)
System.out.println("main thread sequence of " + j + ", loop of" + i);
bShouldSub = true;
this.notify();
}
}
}
有关线程同步或通信问题:要用到共同数据(同步锁)或共同算法的若干个方法时,应该归结在同一个类上,
在方法上做同步,这种设计体现了高类聚和程序的健壮性!
(来源于传智播客张孝祥老师多线程视频学习)