子线程循环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(); } }
}
