概述

LockSupport是JUC提供的一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,和唤醒线程。

主要方法
//blocker的作用是在dump线程的时候看到阻塞对象的信息
public static void park(Object blocker); // 阻塞当前线程
public static void parkNanos(Object blocker, long nanos); // 阻塞当前线程,不过有超时时间的限制
public static void parkUntil(Object blocker, long deadline); // 阻塞当前线程,直到某个时间
public static void park(); // 阻塞当前线程
public static void parkNanos(long nanos); // 阻塞当前线程
public static void parkUntil(long deadline); // 阻塞当前线程
public static void unpark(Thread thread); // 唤醒指定线程

使用:

public class LockSupportDemo {static class Task1 implements Runnable{@Overridepublic void run() {//阻塞住当前线程LockSupport.park();System.out.println("aaa");}}public static void main(String[] args) {Thread thread = new Thread(new Task1());thread.start();try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}//睡眠五秒后打印bbb,然后唤醒thread 线程System.out.println("bbb");LockSupport.unpark(thread);}
}

因为唤醒线程在打印bbb后面,所以对于控制台打印bbb会在aaa的前面。

假如去掉阻塞和唤醒。那样aaa就会在前面。

park()和unpark方法 和 wait 和 notify方法功能有一定的类似,但是park()和unpark方法 无需获取锁就可以实现,但是wait 和 notify必须要获取锁,在同步代码块里面调用,否则会抛出异常。

park和unpark 与 wait notify 不会交叉使用,也就是park线程不能用notify来唤醒。 wait线程也不能用unpark来唤醒。

parkUntil方法传入一个Long类型,该类型是一个时间戳,表示阻塞到哪个时候,绝对时间戳,单位毫秒。

static class Task1 implements Runnable{@Overridepublic void run() {//System.currentTimeMillis()表示获取当前时间戳,加上3000毫秒,表示//阻塞3秒期间没有手动唤醒,三秒后会字段唤醒。LockSupport.parkUntil(System.currentTimeMillis() + 3000);System.out.println("aaa");}}

parkNanos方法也是传入一个Long类型,表示当阻塞这个时间后,没有手动唤醒,就自动唤醒该线程。单位纳秒

static class Task1 implements Runnable{@Overridepublic void run() {//3000000000纳秒=3秒,表示park3秒。LockSupport.parkNanos(1000000000L);System.out.println("aaa");}}

java并发编程LockSupport讲解相关推荐

  1. Java并发编程 LockSupport源码分析

    这个类比较简单,是一个静态类,不需要实例化直接使用,底层是通过java未开源的Unsafe直接调用底层操作系统来完成对线程的阻塞. 1 package java.util.concurrent.loc ...

  2. 闭锁java_实例讲解Java并发编程之闭锁

    这篇文章主要介绍了实例讲解Java并发编程之闭锁,闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有任何线程可以通过,当到达结束状态时,这扇门才会打开并容许所有线程通过,需要的朋友可 ...

  3. java lock park_java并发编程-LockSupport中park与unpark基本使用与原理简单分析

    文章目录 java并发编程原理之---park与unpark 基本使用 情况一,先park再unpark,代码举例与分析 情况二,先unpark再park,代码举例与分析 特点 原理之park &am ...

  4. java并发编程第五课 并发锁讲解一

    第19讲:你知道哪几种锁?分别有什么特点? 本课时我们首先会对锁的分类有一个整体的概念,了解锁究竟有哪些分类标准.然后在后续的课程中,会对其中重要的锁进行详细讲解. 锁的 7 大分类 需要首先指出的是 ...

  5. Java并发编程之锁机制之LockSupport工具

    关于文章涉及到的jdk源码,这里把最新的jdk源码分享给大家----->jdk源码 前言 在上篇文章<Java并发编程之锁机制之AQS(AbstractQueuedSynchronizer ...

  6. Java并发编程,无锁CAS与Unsafe类及其并发包Atomic

    为什么80%的码农都做不了架构师?>>>    我们曾经详谈过有锁并发的典型代表synchronized关键字,通过该关键字可以控制并发执行过程中有且只有一个线程可以访问共享资源,其 ...

  7. Java 并发编程-不懂原理多吃亏(送书福利)

    作者 | 加多 关注阿里巴巴云原生公众号,后台回复关键字"并发",即可参与送书抽奖! ** 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步. ...

  8. java并发实战编程pdf_「原创」Java并发编程系列25 | 交换器Exchanger

    2020年Java面试题库连载中 [000期]Java最全面试题库思维导图 [001期]JavaSE面试题(一):面向对象 [002期]JavaSE面试题(二):基本数据类型与访问修饰符 [003期] ...

  9. java并发编程实践_Java并发编程实践如何正确使用Unsafe

    一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...

最新文章

  1. LaTeX入门第二集!LaTeX的几个示例!
  2. awstats 安装与配置
  3. php如何获取ftp文件信息,FTP 得到文件树[php]
  4. html网页制作图案,巧用CSS滤镜做图案文字-网页设计,HTML/CSS
  5. 机器学习笔记(五):逻辑回归
  6. C语言课后习题(9)
  7. c# post 读取返回html_PHP GET与POST
  8. jQuery和$、jQuery(function(){})和(function(){})(jQuery)
  9. 全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
  10. qgc地面站如何导入离线地图_如何下载百度地图离线包并导入OruxMaps
  11. netperf工具的使用
  12. 高等数学教材上册复习
  13. 梦洁高端化,能解决中国人的睡眠问题吗?
  14. 基于java+jsp+ssm工程车辆租赁系统
  15. 奇偶数排序--整数数组的奇偶数分开(小米公司笔试题)
  16. CCPC 1010 YJJ's Salesman
  17. php立方体相册源码,纯CSS实现3D的代码(正方体、动态立体图片册、平面的星空)...
  18. Maximum Noise Fraction (MNF) 中文翻译
  19. 【PS教程】旧照片修复技巧
  20. 高德poi获取之矩形搜索法(冲出900条限制)

热门文章

  1. Java Web学习笔记09:文件上传与下载
  2. js html5是什么意思,javascript是什么意思
  3. 【Python】理解Python(2) - help() 函数? or 类?
  4. java 点击改变_java 单击按钮改变背景颜色
  5. tracepro杂散光分析例子_AES分析中的干扰效应及校正,你知道吗?
  6. Summed-Area Variance Soft Shadow Mapping(SAVSM):一
  7. 如何学好python基础_零基础如何学好Python开发?
  8. linux创建逻辑目录,Linux创建逻辑卷
  9. [ARC057D]全域木
  10. Golang web filter 轻量级实现