java线程通信
题目:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次。
public class TraditionalThreadCommunicationTest
{public static void main(String[] args){final Business business = new Business();new Thread(new Runnable(){@Overridepublic 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();}}}有关线程同步或通信问题:要用到共同数据(同步锁)或共同算法的若干个方法时,应该归结在同一个类上,
在方法上做同步,这种设计体现了高类聚和程序的健壮性!
(来源于传智播客张孝祥老师多线程视频学习)