0%
理论
void notifyAll():解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。 void notify():随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。 void wait():导致线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
|
源码
public class App { private static int count=1; private final Object lock=new Object(); public static void main( String[] args ) throws InterruptedException { App app=new App(); app.test(); } public void test() throws InterruptedException { new Thread(new TuringRunner(),"jishu").start(); Thread.sleep(1L); new Thread(new TuringRunner(),"oushu").start(); } private class TuringRunner implements Runnable{ @Override public void run() { while(count<=100){ synchronized (lock){ System.out.println(Thread.currentThread().getName()+":"+count++); lock.notifyAll(); try{ if (count<=100){ lock.wait(); } }catch (InterruptedException interruptedException){ System.out.println(interruptedException); } } } } } }
|