我知道notify会唤醒随机设置在等待中的线程。但是看下面的代码
public class ThreadTest {
public static void main(String[] args) {
Object co = new Object();
System.out.println(co);
for (int i = 0; i < 1000; i++) {
MyThread t = new MyThread("Thread" + i, co);
t.start();
}
try {
TimeUnit.SECONDS.sleep(2);
System.out.println("-----Main Thread notify-----");
synchronized (co) {
co.notify();
}
TimeUnit.SECONDS.sleep(2);
System.out.println("Main Thread is end.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
static class MyThread extends Thread {
private String name;
private Object co;
public MyThread(String name, Object o) {
this.name = name;
this.co = o;
}
@Override
public void run() {
try {
synchronized (co) {
System.out.println(name + " is waiting.");
co.wait();
System.out.println(name + " has been notified.");
co.notify();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
但是线程按顺序唤醒,称为wait()。这意味着有人wait()先打来电话,然后先醒来。有人wait()第二次叫,第二次弱了...
我认为这是我的代码导致的错误,但我不知道问题出在哪里。
为了方便显示,我将迭代次数从20次更改为1000次,但结果相同。
慕的地8271018
相关分类