面试中经常会被问到java中sleep与wait的区别,在介绍区别之前先简单介绍下这两个方法:
sleep
1.它导致当前执行线程睡眠特定的时间
2.如果在sychronized内部被调用,其它线程将不能进入
3.如果调用interrupt()方法,将会唤醒睡眠线程
wait
1.它导致当前线程等待直到有其它线程执行notify或notifyAll方法
2.它必须在sychronized内部被调用,也就是说在调用wait方法之前,当然线程必须取得对象的锁
3.线程在wait列表中将会释放锁,其它线程将会取得锁
区别:
1.sleep不需要在sychronized方法或代码块中调用,而wait需要,不然的话会抛出异常
2.wait方法操作在对象上,sleep方法操作在线程上
3.wait将会释放锁,sleep不会释放锁
4.wait需要notify或notifyAll方法唤醒,sleep将在时间到后或者调用interrupt方法后唤醒
5.wait不是静态方法,sleep是Thread类的静态方法