1. 程式人生 > >JAVA多執行緒實現子執行緒迴圈10次,接著主執行緒迴圈100,接著又回到子執行緒迴圈10次,接著再回到主執行緒又迴圈100,如此迴圈50次

JAVA多執行緒實現子執行緒迴圈10次,接著主執行緒迴圈100,接著又回到子執行緒迴圈10次,接著再回到主執行緒又迴圈100,如此迴圈50次

package com.study;


public class Demo001 {
  public static void main(String[] args) {
    Demo001 demo = new Demo001();
    final OutPutClass putPutClass = demo.new OutPutClass();
    Thread thread = new Thread(new Runnable() {

      @Override
      public void run() {
        for (int index = 1; index <= 50; index++) {
          putPutClass.sub(index);
        }
      }
    });
    thread.start();
    //由於main方法下面也是一個執行緒,並且是主執行緒
    for (int index = 1; index <= 50; index++) {
      putPutClass.main(index);
    }
  }

  class OutPutClass {
    private boolean isSync = true;
    public synchronized void sub(int j) {
      while(!isSync){
        try {
          this.wait();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      for(int index = 1;index <= 10;index ++){
        System.out.println("當前執行緒【" + Thread.currentThread().getName() + "】正在執行sub,執行次數為:" + index + ",迴圈次數為:" + j);
      }
      isSync = false;
      this.notify();
    }

    public synchronized void main(int j) {
      while(isSync){
        try {
          this.wait();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      for(int index = 1;index <= 100;index ++){
        System.out.println("當前執行緒【" + Thread.currentThread().getName() + "】正在執行main,執行次數為:" + index + ",迴圈次數為:" + j);
      }
      isSync = true;
      this.notify();
    }
  }
}