LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。
LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题。
因为park() 和 unpark()有许可的存在;调用 park() 的线程和另一个试图将其 unpark() 的线程之间的竞争将保持活性。

简单来说:从表面看到的现象就是:调用object的wait需要有一个监视器对象,否则抛出异常,而LockSupport不需要,可以直接针对某个线程使用该效果

public class LockSupport2Test {private static Thread mainThread;public static void main(String[] args) {ThreadA ta = new ThreadA("ta");// 获取主线程mainThread = Thread.currentThread();System.out.println(Thread.currentThread().getName() + " start ta");ta.start();System.out.println(Thread.currentThread().getName() + " block");// 主线程阻塞
        LockSupport.park(mainThread);System.out.println(Thread.currentThread().getName() + " continue");}static class ThreadA extends Thread {public ThreadA(String name) {super(name);}public void run() {System.out.println(Thread.currentThread().getName() + " wakup others");// 唤醒“主线程”
            LockSupport.unpark(mainThread);}}
}

    public static void main(String[] args) {ThreadA ta = new ThreadA("ta");synchronized (ta) { // 通过synchronized(ta)获取“对象ta的同步锁”try {System.out.println(Thread.currentThread().getName() + " start ta");ta.start();System.out.println(Thread.currentThread().getName() + " block");// 主线程等待
                ta.wait();System.out.println(Thread.currentThread().getName() + " continue");} catch (InterruptedException e) {e.printStackTrace();}}}static class ThreadA extends Thread {public ThreadA(String name) {super(name);}public void run() {synchronized (this) { // 通过synchronized(this)获取“当前对象的同步锁”System.out.println(Thread.currentThread().getName() + " wakup others");notify(); // 唤醒“当前对象上的等待线程”
            }}}

转载于:https://www.cnblogs.com/dengzy/p/5819017.html

thread_LockSupport相关推荐

最新文章

  1. python期末考试试题
  2. java jprofile安装与使用
  3. JDK/JAVA 13正式版发布,此版本带来了以下几大新特性
  4. python智能识别_Python人工智能识别文字内容(OCR)
  5. webpack 引入模块import 后面加入{}和不加大括号有什么区别
  6. python爬斗鱼直播_Python爬取2000万直播数据——看20万游戏主播能否月入100万
  7. Java基础——JSP(三)
  8. 神经网络drop out
  9. 推荐系统专利:一种信息推荐方法、系统及存储介质和终端设备
  10. c++ pdflib 中文乱码解决思路
  11. java doevents_Application.DoEvents()和多线程
  12. win10微软拼音输入法输入文字时候下方不出现中文提示
  13. Codeforces1196D2
  14. 密码学的安全性浅析-1
  15. 二次开发uniswap-01-SDK
  16. Migration中的Collation Confliction
  17. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏
  18. iframe中加入html,HTML中IFRAME标签的使用
  19. js判断android手机浏览器,【笔记】js判断移动端系统及浏览器
  20. 浅谈mysql 平衡二叉树理解_浅析二分查找,二叉树,平衡二叉树,B树,B+树

热门文章

  1. Python easy_insatll 安装包
  2. java集合框架(hashSet自定义元素是否相同,重写hashCode和equals方法)
  3. web前端(滚动条样式)
  4. Android开发者指南24难点各个击破—来自androi中文翻译组
  5. 2009年1月5日 洛基网络教室听课笔记
  6. iis启动时发生意外错误0x8ffe274的解决方法
  7. python教程2017百度云_python下载ICCV2017全套paper
  8. (47)FPGA指数运算符(V代码实现)
  9. (45)System Verilog 类中变量随机激励约束语法
  10. Vivado生成bit文件报错彻底解决