java基础线程-LockSupport
来源:互联网 发布:和孩子一起学编程 pdf 编辑:程序博客网 时间:2024/05/29 14:44
在学习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基础】线程笔记——LockSupport
- Java 线程同步基础类 LockSupport 解析
- Java线程阻塞中断和LockSupport问题
- Java线程阻塞中断和LockSupport问题
- java LockSupport
- java LockSupport
- Java LockSupport
- java线程阻塞中断与LockSupport使用介绍
- Java线程阻塞中断和LockSupport的常见问题
- java线程阻塞中断和LockSupport的常见问题
- java线程阻塞中断和LockSupport的常见问题
- 线程阻塞工具:LockSupport
- Java多线程--LockSupport工具
- Java多线程--LockSupport
- LockSupport
- LockSupport
- LockSupport
- Java之节点流
- 【CSDN英雄会】囯炬CEO张代浩:做写架构的人,做制定游戏规则的人
- linux下程序员装逼神器atom activate-power-mode 安装
- 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.
- 仿百度糯米/美团二级菜单
- java基础线程-LockSupport
- BZOJ 1597:[Usaco2008 Mar]土地购买(斜率优化)
- SecureCRT通过密钥登录
- Android 自定义图形之xml画图
- Android 事件分发机制
- 快捷改变matplotlib绘图中不能正常显示中文的问题
- Mysql服务没有启动的解决办法
- RabbitMQ-三、Java使用--3、路由选择 (Routing)
- UE4:BindUObject,BindLambda