【java标准库系列】java两个线程交替运行

理论

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);
}
}
}
}
}
}