代码量提升之路 - 线程间通信

小实例:写一个程序实现子线程循环10次,接着主线程循环100次,接着子线程循环10次,又接着主线程循环100次,如此往复。一共做50次。

/*
 * 互斥的问题不是写在线程内部的,而是放在线程访问的资源内部,由线程自己去管理自己的资源
 *
 */
package com;
public class TraditionalThreadCommunicateTest {
    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 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 run " + j + " of loop " + i);
        }
        bShouldSub = false;
        this.notify();
    }
    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 run " + j + " of loop " + i);
        }
        bShouldSub = true;
        this.notify();
    }
}


你可能感兴趣的:(Business)