题目:子线程循环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(); } } }
有关线程同步或通信问题:要用到共同数据(同步锁)或共同算法的若干个方法时,应该归结在同一个类上,
在方法上做同步,这种设计体现了高类聚和程序的健壮性!
(来源于传智播客张孝祥老师多线程视频学习)