`
milagro
  • 浏览: 13897 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java线程阻塞中断和LockSupport问题

阅读更多

在学习CountDownLatch的时候非常关心它是如何阻塞线程和唤醒线程的。最后就追踪到了LockSupport。这个类有着wait(),notify()类似的功能,不过更精准。
       LockSupport.park(Thread thread),//阻塞thread
       LockSupport.unpark(Thread thread) //唤醒thread
这两个方法是相对应的,其实这两个方法调用的是Unsafe中对应的方法,而Unsafe是没有开源的,是通过JNI实现的。notify和wait方法的时候也是调用JNI。

问题1: Thread.interrupt()方法和InterruptedException异常的关系?是由interrupt触发产生了InterruptedException异常? 

Thread.interrupt()只是在Object.wait() .Object.join(), Object.sleep()几个方法会主动抛出InterruptedException异常。而在其他的的block常见,只是通过设置了Thread的一个标志位信息,需要程序自我进行处理。

 

问题2:Thread.interrupt()会中断线程什么状态的工作? RUNNING or BLOCKING?

Thread.interrupt设计的目的主要是用于处理线程处于block状态,比如wait(),sleep()状态就是个例子。但可以在程序设计时为支持task cancel,同样可以支持RUNNING状态。比如Object.join()和一些支持interrupt的一些nio channel设计。

问题3: LockSupport.park()和unpark(),与object.wait()和notify()的区别?

1.  面向的主体不一样。LockSuport主要是针对Thread进进行阻塞处理,可以指定阻塞队列的目标对象,每次可以指定具体的线程唤醒。Object.wait()是以对象为纬度,阻塞当前的线程和唤醒单个(随机)或者所有线程。

2.  实现机制不同。虽然LockSuport可以指定monitor的object对象,但和object.wait(),两者的阻塞队列并不交叉。可以看下测试例子。object.notifyAll()不能唤醒LockSupport的阻塞Thread.

问题4: LockSupport能响应Thread.interrupt()事件不?会抛出InterruptedException异常?

LockSupport能响应interrupt事件,但不会抛出InterruptedException异常。

分享到:
评论

相关推荐

    java线程阻塞中断与LockSupport使用介绍

    Java线程阻塞中断是Java并发编程中的一个重要概念,它涉及到线程的生命周期管理以及协作。`Thread.interrupt()` 方法是用于向线程发送中断请求,而`LockSupport` 是Java 5引入的一个低级别的线程同步工具,提供了比`...

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

    在Java多线程编程中,LockSupport类是一个重要的工具,它提供了一种低级别的线程阻塞和唤醒机制。LockSupport并不像synchronized或java.util.concurrent.locks包中的Lock接口那样提供锁的完整功能,但它提供了两个...

    Java并发编程之LockSupport、Unsafe详解.docx

    在Java并发编程中,LockSupport和Unsafe是两个关键的工具类,它们提供了底层的线程控制功能,使得开发者能够深入地管理和控制线程的行为。LockSupport是Java并发库中的一个核心工具类,它提供了线程的阻塞和唤醒功能...

    Java中LockSupport的使用.docx

    LockSupport的核心功能是提供线程阻塞和唤醒的原语,这些功能在Java的并发编程中扮演着重要角色。Java的锁和同步器框架AbstractQueuedSynchronizer(AQS)就是通过LockSupport的`park()`和`unpark()`方法来管理线程...

    Java 多线程与并发(9-26)-JUC锁- LockSupport详解.pdf

    LockSupport是Java中用于多线程同步的一个工具类,它提供了一组基础的线程阻塞和解除阻塞的方法。这个类位于java.util.concurrent.locks包下,是实现并发编程中AQS(AbstractQueuedSynchronizer)框架的重要基础之一...

    浅析JAVA多线程.pdf

    Java 5.0版本中引入了java.util.concurrent.locks包,其中提供了LockSupport类,它是创建锁和其他同步类的基本线程阻塞原语。LockSupport类中的park方法用于阻塞当前线程,直到获取许可证;unpark方法用于释放指定...

    Java多线程和并发知识整理

    LockSupport是线程阻塞和唤醒的基础,用于构建锁和其他同步组件。 以上内容涵盖了Java多线程和并发编程的主要知识点,从理论到实践,从基础到高级,全面解析了并发编程的核心概念和工具。掌握这些知识,开发者可以...

    LockSupportTester.zip

    LockSupport是Java并发编程中的一个重要工具类,位于`java.util.concurrent.locks`包下,它提供了线程阻塞和唤醒的底层支持。在Java多线程编程中,LockSupport主要用于构建锁和其他同步机制,比如ReentrantLock和...

    Java多线程超级详解(看这篇就足够了).pdf

    创建Java线程主要有五种方式: 1. 继承`Thread`类:创建一个新的类继承自`Thread`,并重写`run()`方法,然后创建该类的实例并调用`start()`。 2. 实现`Runnable`接口:创建一个实现`Runnable`接口的类,重写`run()`...

    java线程入门

    上版本中,线程的状态模型进行了扩展,包括了新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、定时等待(TIMED_WAITING)和终止(TERMINATED)六种状态。这些状态描述了线程在其生命周期中的...

    java Thread

    【Java线程详解】 在Java编程中,线程(Thread)是程序执行的最小单元,它与进程一起构成了操作系统的基础。Java提供了丰富的线程管理功能,使得开发者可以方便地进行多任务并行处理。本篇将深入探讨Java线程的核心...

    java+多线程+同步详解Java源码

    综上所述,Java的多线程和同步机制是实现并发编程的基础,通过合理利用这些机制,开发者可以编写出高效、安全的多线程应用程序。在实际工作中,不仅需要理解这些概念,还要能够熟练地应用到项目中,解决多线程环境下...

    java学习资料-线程

    Java线程有五种基本状态:NEW、RUNNABLE、BLOCKED、WAITING 和 TERMINATED。线程从新建(NEW)开始,调用start()后变为可运行(RUNNABLE)。在执行过程中,线程可能进入阻塞(BLOCKED)状态,如等待锁或I/O完成。...

    多线程思维导图总结

    4. **条件变量(Condition)**:配合锁使用,线程可以等待某个条件成立再继续执行,如`LockSupport.park()`和`LockSupport.unpark()`。 5. **等待/通知机制**:Java中的`Object`类提供了`wait()`, `notify()`和`...

    基于JDK源码解析Java领域中的并发锁之设计与实现.pdf

    LockSupport是线程阻塞和唤醒的低级工具,提供了park()和unpark()方法,用于线程的挂起和恢复。它是基于 Unsafe 类实现的,可以实现非阻塞的线程挂起,提高并发效率。 三、Condition接口的设计与实现 Condition接口...

    Java 多线程共享模型之管程(下).doc

    `park()`和`unpark()`是`java.util.concurrent.locks.LockSupport`类中的方法,它们提供了一种低级别的线程阻塞和唤醒机制。`park()`可以使当前线程暂停执行,直到被`unpark()`或者其他外部因素唤醒。`unpark()`则...

    Java concurrency之锁_动力节点Java学院

    4. **LockSupport**:这是一个低级别的线程阻塞和唤醒工具,提供`park()`和`unpark()`方法,避免了`Thread.suspend()`和`Thread.resume()`可能导致的死锁问题。 5. **Condition接口**:Condition允许更精确的线程间...

    [bugfix]重新理解Thread的InterruptedException

    Java中的线程中断是一种协作机制,它并不强制停止一个线程,而是通过设置线程的中断状态来通知线程应该停止当前的工作。当一个线程调用`interrupt()`方法时,它不会立即停止,而是设置一个中断标志。这个标志可以在...

    java多线程之线程同步七种方式代码示例

    `LockSupport`工具类提供了低级别的线程阻塞和唤醒功能。`park()`方法会阻塞当前线程,`unpark(Thread thread)`则会唤醒指定的线程。 6. Condition(条件变量) `java.util.concurrent.locks.Condition`接口提供了...

    java并发编程-AQS和JUC实战

    #### 七、LockSupport 线程阻塞工具类 - **概述**:`LockSupport` 是一个工具类,用于阻塞和解除阻塞线程。 - **常用方法**: - `park()`:使当前线程阻塞。 - `unpark(Thread thread)`:解除对线程的阻塞。 - *...

Global site tag (gtag.js) - Google Analytics