wait()和sleep()的区别

来源:互联网 发布:淘宝 串货 编辑:程序博客网 时间:2024/06/05 05:10

线程在wait 后,可以被另一个拥有相同线程锁对象的线程通过调用notify方法唤醒,而 sleep不行。

wait和notify能正常执行的条件是(否则会抛异常):多个线程的代码,都包在synchronized块中,并且synchronized锁的对象需要是同一个。简而言之,多线程。

当线程调用了wait方法后,就会进入等待状态,需要另外一个持有同一个线程锁的线程通过notify通知强锁。如果有多个线程在等待(且synchronized 锁对象是同一个),则可以调用notifyAll来唤醒。但是,只有其中一个线程能抢到锁并继续执行(因为 wait 的线程都是在 synchronized 块内,需要争夺 synchronized 锁)。其他的线程会被锁住,直到他们再次获得锁。

wait 方法由 Object 对象调用,而 sleep 则由线程调用。

sleep():“我已经完成了一个时间片,在n微秒前,请不要再给我一个时间片”。这时操作系统不会让这个线程做任何事情,直到sleep时间结束。
wait():”我已经完成了一个时间片,在其他线程调用notify()前,请不要再给我一个时间片)。这时操作系统不会安排这个线程继续运行,直到有人调用了notify()。

原创粉丝点击