1,wait可以指定时间也可以不指定。
sleep必须指定时间。
sleep必须指定时间。
2,在同步中时,对cpu的执行权和锁的处理不同。
wait:释放执行权,释放锁。
sleep:释放执行权,不释放锁。
wait:释放执行权,释放锁。
sleep:释放执行权,不释放锁。
class Demo
{
void show()
{
synchronized(this)//
{
wait();//t0 t1 t2
}
}
void method()
{
synchronized(this)//t4
{
//wait();
notifyAll();
}//t4
}
}
class
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
解析:
当t0,t1,t2全部进入show()方法,都wait时,method方法的t4唤醒全部线程,虽然此时show()方法同时又三个线程都活了,但是只有当t4释放锁的时候,才会执行。而且,只有拿到锁的线程才会执行,也就说,t0,t1,t2绝对不会同时执行,在同一时间,只会有一个线程会拿到锁,只有这个线程执行完,释放执行权和锁,另外一个线程才会执行。