`
wangwenhua
  • 浏览: 405 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

wait()与sleep()的不同(转)

 
阅读更多
这两者的施加者是有本质区别的.
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不需要捕获异常


分享到:
评论

相关推荐

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

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

    sw.rar_C++里面的wait_c++ sleep wait_c++ sleep与wait_c++ wait_sleep w

    介绍c++ 里sleep和wait的区别,很详细的 。。

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

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

    wait和sleep的区别.pdf

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

    多线程sleep,yield,wait区别

    `sleep`, `yield`, 和 `wait` 是 Java 中用于线程管理的三个重要方法,它们各自有着不同的功能和用途。理解它们的区别有助于编写出更加高效和可控的多线程程序。 1. **sleep() 方法** - `Thread.sleep(millisecond...

    详解Java中wait和sleep的区别

    与此不同,Thread.sleep()是一个可以从任何上下文调用的静态方法。Thread.sleep()暂停当前线程并且不释放任何锁。 在实际应用中,wait()和sleep()方法都可以用来控制线程的执行时间,但是它们的使用场景...

    java sleep()和wait()

    ### Java中的sleep()与wait()方法详解 #### 一、Java sleep()方法解析 ##### 1.1 方法定义与用途 `sleep()`方法是Thread类中的一个静态方法,用于让当前正在执行的线程暂停执行指定的时间(毫秒),之后线程将重新...

    C#中sleep和wait的区别分析

    `Sleep` 和 `Wait` 是两个常用的方法,它们都可以让线程暂停执行,但它们的使用场景和机制有着本质的区别。 首先,`Sleep` 方法是定义在 `System.Threading.Thread` 类中的,它允许程序员指定一个时间段,在这个...

    Linux多线程编程,替代sleep的几种方式

    我只想要进程的某个线程休眠一段时间的,可是用sleep()是将整个进程都休眠的,这个可能达不到,我们想要的效果了。目前我知道有三种方式:  1、usleep  这个是轻量级的,听说能可一实现线程休眠,我个人并不...

    Sleep和Wait的区别.pdf

    ### Sleep与Wait的区别详解 #### 一、基本概念 在多线程编程中,`sleep`和`wait`是两个非常重要的方法,用于控制线程的执行和协调多个线程之间的交互。理解这两个方法的不同之处对于正确实现多线程程序至关重要。 ...

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

    本文将深入探讨Java中的四个关键方法:`sleep()`, `wait()`, `yield()`和`join()`,以及它们各自的特点和区别。 首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它...

    java sleep和wait的解惑.docx

    ### Java中的sleep与wait详解 #### 一、概述 在Java多线程编程中,`Thread.sleep()` 和 `Object.wait()` 是两个非常重要的方法,它们分别位于 `Thread` 类和 `Object` 类中,用于控制线程的行为。本文将深入探讨这...

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

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

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

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

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

    JAVA线程sleep()和wait()详解及实例 JAVA线程sleep()和wait()是两个常用的线程控制方法,用于控制线程的执行和同步。本篇文章将详细介绍JAVA线程sleep()和wait()的原理、区别和实现机制,并提供实例代码以便更好地...

    java中yieldsleep以及wait的区别.pdf

    在实际开发中,应尽量避免使用`suspend()`和`resume()`,转而使用`wait()`, `notify()`, 和 `notifyAll()`来实现线程间的协作和同步。这样可以确保线程安全,避免出现不可预期的状况。 总结来说,`yield()`、`sleep...

    线程中sleep、join、yield、wait的区别

    它不同于 `sleep()`,因为它不会使线程进入睡眠状态,而是将当前线程从运行状态变为可运行状态,这样调度器可能会选择其他线程执行。`yield()` 的效果不是确定的,因为调度器可能会决定继续执行当前线程。通常,`...

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

    Java线程中的`sleep()`和`wait()`方法都是在多线程环境中...而`wait()`通常与`notify()`和`notifyAll()`结合使用,用于线程间的通信和协作,确保线程间的正确同步。了解这些概念有助于编写更健壮、高效的多线程应用。

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

    与 `sleep()` 不同,`wait()` 会释放对象锁,让其他等待同一锁的线程有机会进入同步代码块。在调用 `wait()` 之前,必须确保当前线程已经获取了对象的锁,否则会抛出 `IllegalMonitorStateException`。 在 `...

Global site tag (gtag.js) - Google Analytics