天天看点

sleep() 和 wait() 有什么区别???

sleep()是Thread类的方法,线程在执行的时候调用了sleep()之后会暂停执行,让出cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,但是如果此线程也进入了同步锁,那么它会让出cpu却不会释放对象锁,后续需要同步锁的线程也就依然不会执行

wait()是Object类的方法,在一个进入了同步锁的线程内,调用wait()方法之后会让出同步锁,让其它正在等待同步锁执行的线程继续执行,而当前线程进如等待此对象的等待锁定池中,

只有其他线程调用了notify方法(notify并不释放锁,只是告诉调用过wait方法的线程可以去参与获得锁的竞争了,但不是马上得到锁,因为锁还在别人手里,别人还没释放。如果notify方法后面的代码还有很多,需要这些代码执行完后才会释放锁,可以在notfiy方法后增加一个等待和一些代码,看看效果),调用wait方法的线程就会解除wait状态和程序可以再次得到锁后继续向下运行。