wait()和sleep()的区别
sleep():
1、sleep()是Thread类的方法;
2、sleep()会使线程在指定的时间暂停线程的运行,但不会释放对象锁,当达到超时时间后,线程会自动进入可运行状态;
3、sleep()可以在任意地方使用;
4、sleep()必须捕获异常;
wait():
1、wait()是Object类的方法;
2、wait()会暂停线程的运行,并释放对象锁,线程进入等待锁池中,只有调用notify()或notifyall()才进入可运行状态;
3、wait(),notify()和notifyall()只能在同步方法或者同步块里面使用;
4、wait()不需要捕获异常;
补充
1、如果线程调用了对象的wait()方法,那么线程便会处于该对象的等待池中,等待锁池中的线程不会去竞争该对象的锁;
2、当有线程调用了对象的notifyAll()或notify(),被唤醒的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁;
网友评论