第一个线程执行到10时进入等待状态,第二个线程执行到20时为等待状态,3秒后main线程把它们唤醒
package ls0526;
public class Contact
{
public static void main(String[] args)
{
Object o=new Object();
new Thread()
{
public void run()
{
for(int i=0;i<100;i++)
{
synchronized (o)
{
if(i==10)
{
try
{
o.wait();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"打印了"+i);
}
}
}
}.start();
new Thread()
{
public void run()
{
for(int i=0;i<100;i++)
{
synchronized (o)
{
if(i==20)
{
try
{
o.wait();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"打印了"+i); }
}
}
}.start();
try
{
Thread.sleep(3000);
synchronized (o)
{
o.notifyAll();
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行后,Thread-0打印到9后为等待状态,Thread-1执行到19后为等待状态,3秒后主线程把它们都唤醒,然后它们执行完所有的代码