import java.util.Random;
/**
* Created by mac on 2/13/17.
*/
public class Main {
static Message message;
public static void main(String[] args) {
message = new Message();
(new Thread(new Reader())).start();
(new Thread(new Reader())).start();
(new Thread(new Reader())).start();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(new Thread(new Writer(message))).start();
//(new Thread(new Reader())).start();
System.out.println("w " + Thread.currentThread().getName());
}
static class Message {
}
static class Writer implements Runnable{
//Message message;
public Writer(Message message){
//this.message = message;
}
public void run()
{
synchronized (message) {
System.out.println("w " + Thread.currentThread().getName());
//message.notifyAll();
message.notify();
}
}
}
static class Reader implements Runnable{
public void run(){
synchronized (message) {
try {
message.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("r "+Thread.currentThread().getName());
}
}
}
}
如果是44L是notify,那么将只有一个等待线程被唤醒。如下:
w Thread-3
r Thread-1
改成43L的notifyAll,将会看到所有都被唤醒了