`
standalone
  • 浏览: 606544 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

wait()和sleep()的区别

    博客分类:
  • java
阅读更多

这两者的施加者是有本质区别的.
sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.

而wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是 thisOBJ.wait(),这里的暂停是阻塞,还是"点火->烧水->煮饭",thisOBJ就好比一个监督我的人站在我旁边,本来该线 程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但正个流程并没有结束,我一直想去煮饭,但还没被允许, 直到那个对象在某个地方说"通知暂停的线程启动!",也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处 继续执行.


其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

 在java.lang.Thread类中,提供了sleep(),
而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程
sleep()可以将一个线程睡眠,参数可以指定一个时间。
而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
    wait有两种形式wait()和wait(milliseconds).
sleep和wait的区别有:
  1,这两个方法来自不同的类分别是Thread和Object
  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
   synchronized(x){
      x.notify()
     //或者wait()
   }
   4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

分享到:
评论

相关推荐

    sleep() 方法和wait()方法的区别.docx

    sleep() 方法和 wait() 方法的区别 sleep() 方法和 wait() 方法都是 Java 中的线程控制方法,但是它们有着本质的区别。下面是对这两种方法的详细比较和分析。 sleep() 方法 sleep() 方法是 Thread 类的静态方法,...

    sleep()、wait()、yield()和join()方法特点及区别.docx

    首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它允许当前线程暂停执行指定的时间,然后恢复执行。而`wait()`是`Object`类的方法,主要用于线程间通信,让当前线程...

    java sleep()和wait()

    #### 三、sleep()与wait()的区别 虽然`sleep()`和`wait()`都可以使线程进入等待状态,但它们之间存在本质的区别: 1. **锁资源的释放**:`sleep()`不会释放任何锁资源,而`wait()`则会释放当前对象的锁。 2. **线程...

    详解Java中的sleep()和wait()的区别

    在Java编程语言中,`sleep()` 和 `wait()` 都是用来控制线程执行的重要方法,但它们的作用和使用场景有着显著的区别。以下是这两个方法的详细解释: 1. **`Thread.sleep(long milliseconds)`** - `sleep()` 方法是...

    高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别.pdf,这是一份不错的文件

    "高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别" 本资源主要讲解了Java中四个常用的线程控制方法:sleep()、yield()、join()和wait(),它们是Java多线程编程中的重要...

    一个理解wait()与notify()的例子

    #### `wait()`与`suspend()`/`sleep()`的区别 `wait()`、`suspend()`以及`sleep()`都可以让线程暂停执行,但它们之间存在显著差异: - **`suspend()`**:已废弃,它会使线程暂停并保持锁的持有权,导致死锁风险...

    Jungle68#-#wait()和sleep()的区别1

    sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。一

    Java Thread 的 run() 与 start() 的区别.docx

    - 阻塞:线程因某种原因暂停,如等待I/O或调用`sleep()`、`wait()`。 - 死亡:`run()`执行完毕或调用`stop()`。 启动线程的两种常见方式: 1. 继承`Thread`类并重写`run()`方法。 2. 实现`Runnable`接口并实现`...

    JAVA线程sleep()和wait()详解及实例

    三、sleep()和wait()的区别 sleep()和wait()方法的主要区别在于: * sleep()方法是Thread类的一个静态方法,而wait()方法是Object类的一个方法。 * sleep()方法使线程进入休眠状态,而wait()方法使线程释放对象锁...

    java 中sleep() 和 wait() 的对比

    在Java编程中,`sleep()` 和 `wait()` 都是用来控制线程的执行流程,但它们之间存在着显著的区别。理解这些差异对于编写多线程程序至关重要。 `sleep()` 是 `java.lang.Thread` 类的一个静态方法,它使得当前正在...

    92道Java多线程与并发面试题含答案(很全)

    6. **wait()和sleep()的区别**: - **类的不同**:wait()属于Object类,sleep()属于Thread类。 - **锁的释放**:wait()会释放持有的锁,而sleep()不会。 - **用途**:wait()用于线程间的交互,等待特定事件;...

    Java多线程通信wait()和notify()代码实例

    wait()方法和sleep()方法的区别: wait()方法和sleep()方法都是使当前线程等待的一种方式,但它们有很大的区别。wait()方法释放当前线程的锁,允许其他线程访问该对象,而sleep()方法不释放锁,当前线程将一直抱着...

    Java中sleep()与wait()的区别总结

    在Java编程语言中,`sleep()` 和 `wait()` 都是用来控制线程执行的重要方法,但它们的作用和使用场景有着显著的区别。以下是这两者详细的区别和解析: 1. **所属类不同**: - `sleep()` 方法是 `java.lang.Thread`...

    深入理解Wait、Notify和Wait与sleep区别

    本文将深入探讨`wait()`, `notify()`以及它们与`sleep()`方法的区别,这些都是Java中与线程同步密切相关的概念。 首先,`wait()`, `notify()`和`notifyAll()`是Object类中的方法,它们主要用于线程间通信和协作。...

    《操作系统》实验报告(3)-(2).doc

    - `wait()`和`waitpid()`函数允许父进程等待子进程的结束。`wait()`等待任意子进程,而`waitpid()`可以选择等待特定的子进程。 4. **进程并发执行**: 进程的并发执行导致了时间片轮转、上下文切换等概念,使得多...

    JAVA多线程面试59题(含答案)_.pdf

    7. **wait()和sleep()的区别**: - **wait()**:释放对象锁,让其他等待该锁的线程有机会执行,需在同步块或方法中调用。 - **sleep()**:不释放锁,仅让线程休眠一段时间后自动恢复执行。 8. **多线程同步方法**...

    JavaSE知识点总结(个人整理).docx

    八、wait() 和 sleep() 的区别 wait() 和 sleep() 是 JavaSE 中的两个不同的方法。wait() 方法可以释放同步锁,而 sleep() 方法不能释放同步锁。wait() 方法可以指定也可以不指定时间,而 sleep() 方法必须指定时间...

    JavaSE知识点总结(个人整理).pdf

    9. **wait()和sleep()的区别**: - `wait()`是`Object`类的方法,`sleep()`是`Thread`类的方法。 - `wait()`会释放对象锁,`sleep()`则不释放。 - `sleep()`必须指定时间间隔,`wait()`可选。 - `wait()`只能在...

    操作系统实验三进程的管道通信(1).docx

    实验的核心是利用Linux系统提供的API,如`fork()`、`pipe()`、`wait()`、`exit()`、`lockf()`、`write()`和`read()`等,来创建并发执行的进程,并确保管道的互斥访问和父子进程的同步。 **一、实验目标** 1. **理解...

    java sleep和wait的解惑.docx

    在Java多线程编程中,`Thread.sleep()` 和 `Object.wait()` 是两个非常重要的方法,它们分别位于 `Thread` 类和 `Object` 类中,用于控制线程的行为。本文将深入探讨这两个方法的区别以及它们在实际开发中的应用场景...

Global site tag (gtag.js) - Google Analytics