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