`
mo默芯
  • 浏览: 16718 次
社区版块
存档分类
最新评论

Java线程唤醒与阻塞常用方法有哪些?

    博客分类:
  • Java
阅读更多

  如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无能为力,因为IO是操作系统实现的,Java代码并没有办法直接接触到操作系统。以下是详细的唤醒方法:

  1. sleep() 方法

  sleep(毫秒),指定以毫秒为单位的时间,使线程在该时间内进入线程阻塞状态,期间得不到cpu的时间片,等到时间过去了,线程重新进入可执行状态。(暂停线程,不会释放锁)

  2.suspend() 和 resume() 方法:。

  挂起和唤醒线程,suspend e()使线程进入阻塞状态,只有对应的resume e()被调用的时候,线程才会进入可执行状态。(不建议用,容易发生死锁)

  3. yield() 方法:

  会使的线程放弃当前分得的cpu时间片,但此时线程任然处于可执行状态,随时可以再次分得cpu时间片。yield()方法只能使同优先级的线程有执行的机会。调用 yield()的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。(暂停当前正在执行的线程,并执行其他线程,且让出的时间不可知)

  4.wait() 和 notify() 方法

  两个方法搭配使用,wait()使线程进入阻塞状态,调用notify()时,线程进入可执行状态。wait()内可加或不加参数,加参数时是以毫秒为单位,当到了指定时间或调用notify()方法时,进入可执行状态。(属于Object类,而不属于Thread类,wait()会先释放锁住的对象,然后再执行等待的动作。由于wait()所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则,会抛出异常IllegalMonitorStateException.)

  5.join()方法

  也叫线程加入。是当前线程A调用另一个线程B的join()方法,当前线程转A入阻塞状态,直到线程B运行结束,线程A才由阻塞状态转为可执行状态。

 

  以上是Java线程唤醒和阻塞的五种常用方法,不同的方法有不同的特点,其中wait() 和 notify()是其中功能最强大、使用最灵活的方法,但这也导致了它们效率较低、较容易出错的特性,因此,在实际应用中应灵活运用各种方法,以达到期望的目的与效果!

分享到:
评论

相关推荐

    Java线程唤醒与阻塞常用方法共2页.pdf.zip

    Java线程唤醒与阻塞常用方法共2页.pdf.zip

    java 同步阻塞并唤醒指定线程

    java 多线程 同步阻塞 唤醒

    Java2023年京东最新高级面试题,中级面试题,大汇总.txt

    什么是线程和进程? **进程与线程的区别? 什么是TreeMap ... Java 中你怎样唤醒一个阻塞的线程? 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。 多线程同步有哪几种方法? 什么是自旋?

    Java2023年最新高级面试题及答案,企业真面试题.md 免费下载,不需要积分

    Java2023年最新高级面试题及答案,企业真面试题.md 免费下载,不需要积分 ... Java 中你怎样唤醒一个阻塞的线程? 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。 多线程同步有哪几种方法?

    Java多线程阻塞与唤醒代码示例

    本文主要向大家分享了Java多线程中的阻塞与唤醒的相关内容,通过这篇文章大家可以大致了解到进入线程阻塞状态和可执行状态的方法,需要的朋友可以了解下。

    Java2023年最新高级面试题,中级面试题,大汇总,免费直接下载,不需要积分 **进程与线程的区别? 什么是TreeM

    什么是线程和进程? **进程与线程的区别? 什么是TreeMap ... Java 中你怎样唤醒一个阻塞的线程? 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。 多线程同步有哪几种方法? 什么是自旋

    Java 线程状态、线程池

    java 线程状态、线程池 1. java 的线程状态 状态 发生条件 ...通过一个wait方法线程进入一个无线等待状态,需要另一个线程进行唤醒操作 TIME_WAITING(计时等待) 当前进程会在一定时间后从等待

    详解Java中的线程让步yield()与线程休眠sleep()方法

    Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法

    Java2023年最新高级面试题及答案,最新版.md

    **进程与线程的区别? 什么是TreeMap 如何停止一个正在运行的线程?... Java 中你怎样唤醒一个阻塞的线程? 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。 多线程同步有哪几种方法?

    JAVA面试题最全集

    调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,...

    并发编程面试专题.pdf

    在 Java 中它跟 synchronized 方法有什么不同? 9) 什么是竞争条件?你怎样发现和解决竞争? 10) 你将如何使用 threaddump?你将如何分析 Thread dump? 11) 为什么我们调用 start()方法时会执行 run()方法,为什么...

    详解Java多线程编程中LockSupport类的线程阻塞用法

    LockSupport类提供了park()和unpark()两个方法来实现线程的阻塞和唤醒,下面我们就来详解Java多线程编程中LockSupport类的线程阻塞用法:

    线程生命周期.pdf

    以图表形式详细列出java线程生命周期,创建线程,线程就绪,线程阻塞,线程中断,线程唤醒,线程运行之间的关系

    java 线程使用整理

    java 多线程读取同一文件 首先在此声明,本人小菜鸡一枚,如有错误,还请各位大佬点出并轻点出手,谢谢!! 读取数据 分析: 如果读取文件的数据很简单,但是如果多个线程读取同一个文件的数据我们该如何处理: 待...

    java语言操作系统课程设计模拟进程管理系统源码.zip

    ③阻塞、唤醒:利用系统提供的线程类模仿进程,直接启动相关的系统调用即可使线程暂停或恢复,从而达到阻塞和唤醒的目的; 针对需求3 :通过编写P、V原语来实现进程的同步; 针对需求4:为进程管理器类编写调度函数...

    Java并发编程原理与实战

    Java中的阻塞队列原理与使用.mp4 实战:简单实现消息队列.mp4 并发容器ConcurrentHashMap原理与使用.mp4 线程池的原理与使用.mp4 Executor框架详解.mp4 实战:简易web服务器(一).mp4 实战:简易web服务器(二)....

    基于JAVA的模拟进程管理系统源码操作系统课程设计,包括进程创建、撤销、阻塞、唤醒,进程的同步控制

    ③阻塞、唤醒:利用系统提供的线程类模仿进程,直接启动相关的系统调用即可使线程暂停或恢复,从而达到阻塞和唤醒的目的; 针对需求3 :通过编写P、V原语来实现进程的同步; 针对需求4:为进程管理器类编写调度函数...

    Java并发编程实战

    本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则...

    Java高级程序设计测试含答案.docx

    () [单选题] * A.BufferedReader(正确答案) B.BufferedWriter C.Bufferedlnputstream D.Bufferedoutputstream 下面关于Java线程的说法哪些是正确的() [单选题] * A.每一个Java线程可以看成由代码、一个真实...

Global site tag (gtag.js) - Google Analytics