两个线程,分别有两数据结构:1到10的数据和A到E的字符。要求打印出:12A34B56C78D910E 。程序如下:
public class NotifyAllTest {
/** 期望的打印结果:12A34B56C78D910E ,怎么搞 ?
* @param args
*/
public static void main(String[] args) {
int[] numArr = {1,2,3,4,5,6,7,8,9,10};
char[] charArr = {'A','B','C','D','E'};
NotifyAllTest obj = new NotifyAllTest();
new Thread(new OneThread(numArr, obj)).start();
new Thread(new TwoThread(charArr, obj)).start();
}
}
class OneThread implements Runnable {
private int[] numArr;
private NotifyAllTest notifyAllTest;
public OneThread(int[] numArr,NotifyAllTest notifyAllTest) {
this.notifyAllTest = notifyAllTest;
this.numArr = numArr;
}
@Override
public void run() {
synchronized (notifyAllTest) {
for(int i = 0 ,len = numArr.length; i < len ; i++) {
if(i%2==0){
try {
notifyAllTest.wait(200);
notifyAllTest.notifyAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(numArr[i]);
}
}
}
}
class TwoThread implements Runnable {
private char[] charArr;
private NotifyAllTest notifyAllTest;
public TwoThread(char[] charArr,NotifyAllTest notifyAllTest) {
this.charArr = charArr;
this.notifyAllTest = notifyAllTest;
}
@Override
public void run() {
synchronized (notifyAllTest) {
for(int i = 0 ,len = charArr.length; i < len ; i++) {
if(i%1==0){
try {
notifyAllTest.wait(300);
notifyAllTest.notifyAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(charArr[i]);
}
}
}
}