sleep()方法和wait()方法之间有什么差异?
2017-06-15 22:31
211 查看
sleep()方法用被用于让程序暂停指定的时间,而wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者nofifyAl()方法
主要的区别是,wait()释放锁或监视器,然而sleep()不释放任何锁或监视器等。wait被用于线程间通信,而sleep一般来说被用于在执行时引入暂停。
Thread.sleep()让当前线程进入不可运行状态一段时间。线程继续保持它所获取的监视器——即如果线程当前处于同步块或方法中,则没有其他线程可以进入此块或方法。如果另一个线程调用t.interrupt()会唤醒sleep的线程。注意,sleep()是一种静态方法,这意味着它总是影响当前线程(执行睡眠方法的线程)。一个常见的错误是用t.sleep期望不同的线程休眠,但实际上是当前线程休眠。
object.wait()让当前线程进入不可运行状态,如sleep()一样,但不同的是wait方法从一个对象调用,而不是从一个线程调用;我们称这个对象为“锁定对象(lockObj)”。在lockObj.wait()被调用之前,当前线程必须在lockObj上同步(synchronize);然后调用wait()后释放这个锁,并将线程增加到与lockObj相关的“等待名单(wait list)”。然后,另一个在同一个lockObj锁定(synchronize)的方法可以调用lockObj.nofity()。这会唤醒原来等待的线程。基本上,wait() / notify()就像sleep() / interrupt(),只是活动线程不需要直接指向一个睡眠线程,他们只需要共享锁对象(lockObj)。
让我们将上面的要点分类:
sleep():在Thread上调用,总是当前正在执行的线程。
sleep():如果同步,多个线程都会等休眠线程苏醒。
sleep():执型超时或者调用interrupt之前保持锁。
sleep():执型超时或者调用interrupt之前保持锁。
wait():多线程同步。
希望以上信息能给你的知识库增加一些价值。
Happy Learning !!
主要的区别是,wait()释放锁或监视器,然而sleep()不释放任何锁或监视器等。wait被用于线程间通信,而sleep一般来说被用于在执行时引入暂停。
Thread.sleep()让当前线程进入不可运行状态一段时间。线程继续保持它所获取的监视器——即如果线程当前处于同步块或方法中,则没有其他线程可以进入此块或方法。如果另一个线程调用t.interrupt()会唤醒sleep的线程。注意,sleep()是一种静态方法,这意味着它总是影响当前线程(执行睡眠方法的线程)。一个常见的错误是用t.sleep期望不同的线程休眠,但实际上是当前线程休眠。
object.wait()让当前线程进入不可运行状态,如sleep()一样,但不同的是wait方法从一个对象调用,而不是从一个线程调用;我们称这个对象为“锁定对象(lockObj)”。在lockObj.wait()被调用之前,当前线程必须在lockObj上同步(synchronize);然后调用wait()后释放这个锁,并将线程增加到与lockObj相关的“等待名单(wait list)”。然后,另一个在同一个lockObj锁定(synchronize)的方法可以调用lockObj.nofity()。这会唤醒原来等待的线程。基本上,wait() / notify()就像sleep() / interrupt(),只是活动线程不需要直接指向一个睡眠线程,他们只需要共享锁对象(lockObj)。
synchronized(LOCK) { Thread.sleep(1000); // LOCK is held } synchronized(LOCK) { LOCK.wait(); // LOCK is not held }
让我们将上面的要点分类:
调用:
wait():在对象上调用,并且当前线程必须在一个lockObj上同步。sleep():在Thread上调用,总是当前正在执行的线程。
同步:
wait():如果同步,那么多个线程会一个一个的访问对象。sleep():如果同步,多个线程都会等休眠线程苏醒。
维持锁:
wait():释放锁,让其他对象机会执行。sleep():执型超时或者调用interrupt之前保持锁。
苏醒条件:
wait():直到由对象调用notify(), notifyAll()sleep():执型超时或者调用interrupt之前保持锁。
用途:
sleep():时间同步;wait():多线程同步。
希望以上信息能给你的知识库增加一些价值。
Happy Learning !!
相关文章推荐
- java 中的 wait()方法和 sleep()方法的区别是什么?
- 线程中sleep方法和wait方法有什么区别?
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
- Thread类的sleep()方法和对象的wait()方法都能使线程暂停执行,他们有什么区别?
- wait()方法和 sleep()方法的区别是什么?
- sleep()方法和wait()方法的区别是什么?
- sleep和wait分别是那个类的方法,有什么区别
- Java - Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
- java中的wait()方法和sleep()方法的区别是什么?| Java 基础
- java 中的 wait()方法和 sleep()方法的区别是什么?
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
- sleep()、wait()、yield()、join()方法 解析
- 、sleep() wait() yeild()三者之间的区别?
- sleep和wait有什么区别。
- 、sleep() wait() yeild()三者之间的区别?
- JAVA中sleep()、wait()、yield()、join()方法浅析
- 多线程中sleep()、wait()方法等得区别?
- sleep() 和 wait() 有什么区别?