LockSupport提供park()和unpark()方法实现线程阻塞和唤醒。底层实现是通过sun.misc.Unsafe的park和unpark。

关于sun.misc.Unsafe的说明请参见我的另外一篇博客。

核心就是通过一个信号量(permit)实现的,0阻塞,1继续执行。

park时可以指定blocker以及阻塞时长或者阻塞到什么时间点,通过UNSAFE.park第一个boolean参数决定,true指定时间,false指定时长。

可以先执行unpark,再执行part的时候发现之前unpark设置为1了,直接继续执行,并设置信号量为0。

park时除了unpark或者时间到了的情况外,阻塞的线程也会被其他线程调用该线程的interrupt方法中断并立即返回,

该过程不会抛出异常,所以调用者需要检查线程状态,是怎样的方式被唤醒的。

park的注释说明如下:

This method does <em>not</em> report which of these caused the
 method to return. Callers should re-check the conditions which caused
 the thread to park in the first place.

与wait的区别:

wait需要获取对象锁,LockSupport不需要;

wait挂起的是当前线程,属于随机性,唤醒notify,notifyAll也是随机的,LockSupport直接控制的是线程,指定线程park,指定线程unpark或interrupt

最新文章

  1. jquery和Js的区别和基础操作
  2. 改变BootStrap主题颜色
  3. CMD魔法堂:获取进程路径和PID值的方法集
  4. grep, sed, awk
  5. 改变了Tomcat路径后无法卸载和重装的解决办法
  6. Python学习路程day6
  7. 初识ASP.NET---若干常见错误
  8. HDU 2594 (简单KMP) Simpsons’ Hidden Talents
  9. MongoDB 复制集(二) 选举 自动故障切换
  10. C# MVC 自学笔记—2 MVC Movie简介
  11. 猎八哥浅谈MYSQL触发器
  12. 有趣的冷知识:编程中Foo, Bar 到底什么意思?
  13. 方便快捷的求导求积分解方程在线工具sage介绍
  14. 1.1.10 word2010图片另存为存到图片库里,怎么修改之
  15. WPF中的Bitmap与byte
  16. 找第二大的数SQL-Second Highest Salary
  17. CentOS Linux更改MySQL数据库目录位置具体操作
  18. JMeter做http接口压力测试
  19. 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了
  20. Opencv博文收藏列表

热门文章

  1. Mac系统升级后git没法使用的问题
  2. Educational Codeforces Round 76 (Rated for Div. 2) B. Magic Stick
  3. Docker - Docker Engine 结构结构概述
  4. VIM - 问题: 简单变换
  5. P&amp;R 7
  6. Kali2.0中peda与pwntools的安装
  7. 前端开发:mock.js的简单应用(生成随机数据,拦截 Ajax 请求)
  8. Azure IoT Hub 十分钟入门系列 (3)- 使用消息路由将原始设备数据记录存档
  9. 前端一面/面试常考题1-页面布局:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。
  10. list-style: none;