深入学习Lock锁(2)——LockSupport工具类

简介: 参考资料《Java并发编程的艺术》

在同步组件中,当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具。

    LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread thread) 方法来唤醒一个被阻塞的线程。

  1. public static void park():阻塞当前线程,如果调用unpark(Thread thread) 方法解除阻塞或者中断线程该方法才能返回。
  2. public static void parkNanos( long nanos):在park()方法的基础上增加了超时返回条件。
  3. public static void parkUntil(long deadline):阻塞当前线程,直到从1970年到deadline毫秒数的某一时刻
  4. public static void unpark(Thread thread):唤醒处于阻塞状态的线程。

    在Java 6中,LockSupport增加了park(Object blocker)、parkNanos(Object blocker,long nanos) 和parkUntil(Object blocker,long deadline)3个方法,用于实现阻塞当前线程的功能,其中参数 blocker是用来标识当前线程在等待的对象(以下称为阻塞对象),该对象主要用于问题排查和系统监控。因为当线程阻塞(使用synchronized关键字)在一个对象上时,通过线程dump能够 查看到该线程的阻塞对象,方便问题定位,而Java 5推出的Lock等并发工具时却遗漏了这一 点,致使在线程dump时无法提供阻塞对象的信息。因此,在Java 6中,LockSupport新增了上述3 个含有阻塞对象的park方法,用以替代原有的park方法。

相关文章
|
SQL 缓存 算法
CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点
CPU密集型与I/O密集型是在计算机上执行任务的两种策略,在并发执行任务场景下,我们需要选择使用多线程或多进程; 如果是IO密集型任务,使用多线程,线程越多越好; 如果是CPU密集型任务,使用多进程,线程数量与CPU核心数匹配。
1995 0
|
Web App开发 编解码 JavaScript
Flutter Web:图片相关及跨域问题
在flutter web上也可以使用Image这个widget来加载显示图片。但是涉及到网络图片的时候就可能会出现问题,现象是不显示图片,控制台报错:
2186 0
|
新零售 Java C++
java脚本引擎的设计原理浅析
本人在阿里巴巴长期担任和负责规则引擎、流程引擎相关的技术开发,另外还负责开发和维护开源项目:https://github.com/alibaba/QLExpress QLExpress是一个脚本引擎工具,类似Groovy,JRuby等,是为了解决当时电商规则动态编译、表达式高精度计算、复杂布尔运算、自定义函数和操作符号、语法树生成等需求而设计的。
16808 0
|
Kubernetes Ubuntu 网络协议
超好用的k8s中pod诊断工具:kubectl-debug
超好用的k8s中pod诊断工具:kubectl-debug
超好用的k8s中pod诊断工具:kubectl-debug
|
Kubernetes 开发者 Docker
探索微服务架构下的容器化部署策略
在当今快速发展的软件工程领域,微服务架构已成为构建可扩展、灵活且高效系统的首选方法。与此同时,容器技术,尤其是Docker和Kubernetes,为微服务的部署提供了前所未有的便利和效率。本文将深入探讨微服务架构下的容器化部署策略,包括容器化的基本概念、微服务的特点、以及如何利用Docker和Kubernetes等工具实现高效、可靠的服务部署。通过具体案例分析,本文旨在为开发者提供一套完整的微服务容器化部署解决方案,帮助他们在复杂多变的软件开发环境中保持竞争力。
556 1
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
1390 96
|
数据采集 监控 数据挖掘
ERP系统中的数据分析与报表生成
【7月更文挑战第25天】 ERP系统中的数据分析与报表生成
1023 2
|
Java API
QLExpress功能清单
QLExpress从一开始就是从复杂的阿里电商业务系统出发,并且不断完善的脚本语言解析引擎框架,在不追求java语法的完整性的前提下(比如异常处理,foreach循环,lambda表达式,这些都是groovy是强项),定制了很多普遍存在的业务需求解决方案(比如变量解析,spring打通,函数封装,操作符定制,宏替换),同时在高性能、高并发、线程安全等方面也下足了功夫,久经考验。
21979 1
|
监控 Dubbo 网络协议
6种微服务的RPC框架
6种微服务的RPC框架