`
msi110
  • 浏览: 31625 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

sleep()和wait()方法之间的区别

阅读更多

这两者的施加者是有本质区别的:
      sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定 ,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧 对于运行的主动权是由我的流程来控制。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非醒来的线程具有更高的优先级正在运行的线程因为其它原因而阻塞

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

     wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。当调用wait()后,线程会释放掉它所占有的锁标志,从而使线程所在对象中的其它synchronized数据可被别的线程使用。

 

两者都可以让线程暂停一段时间,但是本质的区别是:

      一个线程的运行状态控制,

      一个是线程之间的通讯的问题

      在java.lang.Thread类中,提供了sleep(),而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程。sleep()可以将一个线程睡眠,参数可以指定一个时间。而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。

 

总结:sleep()与wait()之间的区别有:

     1、这两个方法来自不同的类分别是Thread(sleep)和Object(wait)。

     2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

     3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。

     4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。

分享到:
评论

相关推荐

    Sleep和Wait的区别.pdf

    在多线程编程中,`sleep`和`wait`是两个非常重要的方法,用于控制线程的执行和协调多个线程之间的交互。理解这两个方法的不同之处对于正确实现多线程程序至关重要。 #### 二、`sleep`方法详解 ##### 1. 方法定义 `...

    java sleep()和wait()

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

    详解Java中wait和sleep的区别

    wait()和sleep()方法都是Java多线程编程中重要的概念,它们之间的区别在于线程同步和执行时间控制。我们需要根据实际情况选择合适的方法来实现多线程同步和控制线程的执行时间。 资源详解: 1. wait()方法和...

    Java线程中sleep和wait的区别详细介绍

    Java线程中的`sleep()`和`wait()`方法都是在多线程环境中用于控制线程执行的重要工具,但它们之间存在着显著的区别。理解这些差异对于编写高效、正确的并发代码至关重要。 首先,Java的多线程机制基于抢占式模型,...

    java之wait,notify的用法([ 详解+实例 ])

    wait方法与sleep和suspend方法的主要区别在于,wait方法可以释放锁,而sleep和suspend方法不能释放锁。wait方法可以让当前线程暂时放弃对象锁,让其他线程使用,而sleep和suspend方法不能做到这一点。 结论 在Java...

    wait和sleep的区别.pdf

    流媒体知识核心概念中提到的视频封装格式和视频压缩编码标准,以及wait和sleep的区别,以下是相关的知识点: 首先,视频封装格式和视频压缩编码标准是构建流媒体技术的两大核心组件。 视频封装格式是一种存储视频...

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

    本篇文章将详细介绍JAVA线程sleep()和wait()的原理、区别和实现机制,并提供实例代码以便更好地理解这两个方法。 一、sleep()方法 sleep()方法是Thread类的一个静态方法,使得Runnable实现的线程也可以使用sleep...

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

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

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

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

    wait和notifyAll方法的使用示例

    ### 使用wait和notifyAll方法详解 #### 一、引言 在Java多线程编程中,`wait()` 和 `notifyAll()` 方法是非常重要的同步机制,主要用于实现线程间的通信与同步控制。通过合理运用这些方法,可以有效地解决生产者...

    JVM线程状态和Thread.sleep的实现原理探究.pdf

    在探究JVM线程状态以及Thread.sleep的实现原理时,我们首先需要了解Java线程与操作系统线程之间的关系。在Java虚拟机(JVM)中,每个线程通常都是以一对一的关系映射到操作系统线程上的。然而,尽管两者在实现上是...

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

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

    java社招二面面试题有哪些

    二面问题汇总 对象之间的关系 ...sleep和wait的区别 collection和map的区别 集合哪些是排序的 List的Conllections.sort()底层怎么实现的 Comapeble和compartor jsp和servlet的区别 jsp要编译吗 jsp编译了放在哪

    Object类wait及notify方法原理实例解析

    Object类中的wait和notify方法是Java多线程编程中最重要的同步机制之一,它们是Java.lang.Object类中的两个方法,用于在多线程之间进行通信和同步。wait方法将当前线程置于等待状态,而notify方法则用于唤醒等待的...

    2023年JAVA面试题资料.doc

    封装是指将数据和方法封装在一起,继承是指子类继承父类的属性和方法,多态是指一个对象可以具有多种形式。 sleep() 和 wait() 的区别 sleep() 和 wait() 都是 Thread 类的方法,但是它们有着不同的作用。sleep() ...

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

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

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

    涵盖了多线程的基本概念、优点、线程和进程的区别、Java 实现多线程的方式、启动线程方法的区别、终止线程的方式、线程的生命周期、wait()和 sleep()方法的区别、多线程同步的方法、死锁的定义和避免方法、多线程...

    信号处理函数解析,signal ,sleep,raise等等函数的使用

    信号处理函数可以捕捉和处理信号,从而实现进程之间的通讯和同步。 1. alarm 函数 alarm 函数用于设置信号 SIGALRM 在经过参数 seconds 指定的秒数后传送给目前的进程。如果参数 seconds 为 0,则之前设置的闹钟会...

    线程编程方面若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

    `sleep()`和`wait()`方法虽然都能让线程暂停执行,但它们之间存在显著差异。`sleep()`是`Thread`类的方法,它不会释放对象锁,只是让当前线程暂时休眠。而`wait()`属于`Object`类,调用`wait()`会让线程放弃对象锁,...

Global site tag (gtag.js) - Google Analytics