子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次...
    
package com.mhm.test1;
/**
 * 子线程跑10次,主线程跑5次,然后子线程再跑10次,主线程再跑5次,往返3次
 * @author Mahone
 *
 */
public class Test2 {
  
  public static void main(String[] args) {
    Test2 t2 = new Test2();
    t2.init();
  }
  
  private void init() {
    final Business b = new Business();
    
    Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
        for (int i = 0; i <3; i++) {
          b.sub(i);
        }
      }
    });
    t.start();
    for (int i = 0; i <3; i++) {
      b.main(i);
    }
    
  }
  
  
  /**
   * 业务类
   * @author Administrator
   *
   */
  class Business {
    // 默认subFlag为true,子线程可执行
    private boolean subFlag = true;
    
    public synchronized void sub(int loop) {
      // 如果子线程不可执行,则当前线程等待,CPU给其他线程使用
      if (!subFlag) {
        try {
          this.wait();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      
      for (int i = 0; i < 10; i++) {
        System.out.println("loop: " + loop + " sub-" + Thread.currentThread().getName());
      }
      
      // 执行完子线程,子线程flag设为false
      subFlag = false;
      // 通知其他线程开始响应
      this.notify();
    }
      
    
    public synchronized void main (int loop) {
      if (subFlag) {
        try {
          this.wait();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      
      for (int i = 0; i < 5; i++) {
        System.out.println("loop: " + loop + " main-" + Thread.currentThread().getName());
      }
    
      subFlag = true;
      this.notify();
    }
  }
  
  
}