`
qdgyj
  • 浏览: 8943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java 线程--wait/sleep的区别

阅读更多
wait/sleep的区别

Thread有一个sleep()静态方法,它也能使线程暂停一段时间。sleep与wait的不同点是:sleep并不释放锁,并且sleep的暂停和wait暂停是不一样的。obj.wait会使线程进入obj对象的等待集合中并等待唤醒。

但是wait()和sleep()都可以通过interrupt()方法打断线程的暂停状态,从而使线程立刻抛出InterruptedException。

如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。

需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到wait()/sleep

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复   。调用sleep不会释放对象锁。
   wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方   法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
分享到:
评论

相关推荐

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...

    Java多线程-线程间的通信

    #### 三、`wait`与`sleep`的区别 1. **锁的释放**: - `wait()`:释放锁。 - `sleep(long millis)`:不释放锁。 2. **中断响应**: - `wait()`:可以响应中断请求。 - `sleep()`:也可以响应中断请求,但需要...

    Java的多线程-线程间的通信.doc

    Java提供了多种机制来实现线程间的通信,包括使用wait(), notify()和notifyAll()方法,以及使用synchronized关键字控制并发访问共享资源。这些方法都定义在java.lang.Thread类中。 1. **wait(), notify()和...

    多线程sleep,yield,wait区别

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

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

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

    java编程 ---线程

    线程的基本控制包括:`sleep()`让线程暂停一段时间,`join()`使当前线程等待另一个线程结束,`yield()`让当前线程让出CPU使用权,以及`interrupt()`中断线程。 **4. 使用`synchronized`关键字** `synchronized`用于...

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    java sleep()和wait()

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

    北大Java--多线程

    - Java线程有优先级,通过`setPriority()`方法设置。线程调度策略可能依赖于操作系统的具体实现,但通常优先级高的线程会被优先调度。 5. **多线程的互斥与同步**: - 互斥是指在同一时刻,只有一个线程能访问...

    Java多线程-线程的生命周期

    线程状态之间的转换是由Java API的方法调用触发的,如`start()`、`sleep()`、`wait()`、`join()`等。了解这些状态和转换机制对于编写高效的并发程序至关重要,因为它有助于避免死锁、饥饿和其他并发问题。在实际编程...

    经典Java --线程

    Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提升程序的效率和响应性。在Java中,线程可以分为两类:用户线程和守护线程。用户线程是应用程序的主要执行部分,而守护线程则是为用户线程...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    Java线程状态流转图

    Java线程状态流转图知识点总结 Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换...

    Java面试-线程.doc

    面试中,关于Java线程的知识点通常包括线程的创建、同步控制以及线程的生命周期管理。以下是对这些主题的详细解释: 1. **线程创建**: - **继承Thread类**:创建一个新的类,该类继承自Thread类,并重写run()方法...

    Java 实例 - 线程挂起源代码+详细指导教程.zip

    在Java编程中,线程是程序执行的基本单元,它允许应用程序...总之,理解和掌握Java线程挂起是提升多线程编程技能的关键。通过实践和不断学习,你将成为一个熟练的Java并发程序员,能够编写出高效、稳定的多线程应用。

    彻底明白Java的多线程-线程间的通信.doc

    Java提供了多种机制,如`wait()`, `notify()`, 和 `notifyAll()`方法,这些方法在`Object`类中定义,用于控制线程的执行顺序和同步。此外,`synchronized`关键字用于控制对共享资源的访问,避免竞态条件和数据不一致...

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

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

    计算机后端-Java-Java核心基础-第20章 多线程 16. sleep()和wait()的异同.avi

    计算机后端-Java-Java核心基础-第20章 多线程 16. sleep()和wait()的异同.avi

    Java-for-thread.zip_java 线程

    Java线程是编程中的一个重要概念,特别是在开发高并发和实时响应的应用程序时。Java作为一种多线程编程语言,允许开发者在同一程序中同时执行多个独立的代码段,这极大地提高了程序的效率和性能。下面我们将详细探讨...

Global site tag (gtag.js) - Google Analytics