假设一个对象:object,当有一个线程调用这个对象的wait();方法的时候。这个进程就进入这个对象的等待队列。然后这个线程就暂停运行。若多个线程同时调用这个对象的wait().多个线程对进入这个对象的等待队列。(即:在哪个线程中调用object.wait(),哪个线程就停止,同时这个线程再启动的权力交给这个object).
notify():通知object,让它随机把他管辖范围内的一个线程启动。
notifyAll()。通知object管辖下的所有线程,撒丫子狂奔吧。
(注意以上方法执行体必须被同步代码块包含synchronized,因为它是多线程共享操作。可能存在线程之间的竞争。)
object在一个时刻必须只能被一个线程所保有!!!!
即便是另一个线程通过objcect通知等待的线程执行,也要等通知的那个线程释放object之后。
/** * Created by li on 2016/11/24. */public class DemoThread extends Thread { private final static Object object = new Object(); public static void main(String[] args) { DemoThread demoThread = new DemoThread(); demoThread.start(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(1); synchronized (object) { object.notify(); } System.out.println(demoThread.isAlive());// try {// synchronized (demoThread) {// demoThread.wait();// }// } catch (InterruptedException e) {// e.printStackTrace();// }// while (true) {// System.out.println(1);// try {// Thread.sleep(1000);// } catch (InterruptedException e) {// e.printStackTrace();// }// }// demoThread.interrupt(); } @Override public void run() { while (!interrupted()) { System.out.println("bulabulabula"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } try { synchronized (object) { object.wait(); System.out.println("线程重新启动"); } } catch (InterruptedException e) { e.printStackTrace(); } } }}