java线程面试题1

    技术2022-05-13  9

        子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。

     

    备注:不可能一上来就写出上面的完整代码,最初写出来的代码如下,问题在于两个线程的代码要参照同一个变量,即这两个线程的代码要共享数据,所以,把这两个线程的执行代码搬到同一个类中去:

     

    public class InterviewQuestionTest {

      public static void main(String[] args) {  new InterviewQuestionTest().init(); }

     private void init() {  final Business business = new Business();  new Thread() {   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 bShouldRun = true;

      public synchronized void sub(int count) {   if (!bShouldRun) {    try {     this.wait();    } catch (InterruptedException e) {     e.printStackTrace();    }   }   for (int j = 1; j <= 10; j++) {

        System.out.println(Thread.currentThread().getName() + "i:"      + count + " sub j:" + j);   }   bShouldRun = false;   this.notify();  }

      public synchronized void main(int count) {   if (bShouldRun) {    try {     this.wait();    } catch (InterruptedException e) {     e.printStackTrace();    }   }

       for (int j = 1; j <= 100; j++) {

        System.out.println(Thread.currentThread().getName() + "i:"      + count + " main j:" + j);   }   bShouldRun = true;   this.notify();  } }

    }


    最新回复(0)