美文网首页
Java线程唤醒与阻塞的常用方法

Java线程唤醒与阻塞的常用方法

作者: 程序员阿远 | 来源:发表于2022-04-06 20:39 被阅读0次

如果线程是因为调用了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线程唤醒与阻塞的常用方法

    如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出Int...

  • 2020-08-03如何实现Java线程的 阻塞/唤醒(和暂停/

    如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似 以下为线程 阻塞/唤醒 主要代码 如何使用?

  • java并发之AQS原理

    java并发之AQS原理 知识导读 AQS定义了同步队列+阻塞线程+唤醒线程的基本实现。是否该阻塞(tryAcqu...

  • Java ReentrantLock锁机制概念篇

    分享Java锁机制实现原理,细节涉及volatile修饰符、CAS原子操作、park阻塞线程与unpark唤醒、双...

  • Java并发-18.LockSupport工具

    阻塞和唤醒一个线程,需要用到LockSupport工具类,它定义了一组公共静态方法,提供了最基本的线程阻塞和唤醒功...

  • Java 多线程

    多线程主要技术进程与线程线程状态阻塞状态分类线程的调度常用函数说明Thread类方法创建线程线程池线程安全向线程传...

  • JUC--Condition

    2018-10-01 原文推荐 死磕Java并发 Condition提供了一系列的方法来对阻塞和唤醒线程:awa...

  • Java 面试题

    java多线程实现主线程等待子线程执行完问题 1、使用Thread的join()方法,join()方法会阻塞主线程...

  • 并发编程(三)synchronized实现原理

    Java线程切换的实质 Java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的帮忙...

  • CountDownLatch使用

    CountDownLatch使用 CountDownLatch是java中的一个同步工具类.用于对线程的阻塞和唤醒...

网友评论

      本文标题:Java线程唤醒与阻塞的常用方法

      本文链接:https://www.haomeiwen.com/subject/cwddsrtx.html