thread_LockSupport
2024-05-31 06:48:45
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相关推荐
最新文章
- python期末考试试题
- java jprofile安装与使用
- JDK/JAVA 13正式版发布,此版本带来了以下几大新特性
- python智能识别_Python人工智能识别文字内容(OCR)
- webpack 引入模块import 后面加入{}和不加大括号有什么区别
- python爬斗鱼直播_Python爬取2000万直播数据——看20万游戏主播能否月入100万
- Java基础——JSP(三)
- 神经网络drop out
- 推荐系统专利:一种信息推荐方法、系统及存储介质和终端设备
- c++ pdflib 中文乱码解决思路
- java doevents_Application.DoEvents()和多线程
- win10微软拼音输入法输入文字时候下方不出现中文提示
- Codeforces1196D2
- 密码学的安全性浅析-1
- 二次开发uniswap-01-SDK
- Migration中的Collation Confliction
- 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏
- iframe中加入html,HTML中IFRAME标签的使用
- js判断android手机浏览器,【笔记】js判断移动端系统及浏览器
- 浅谈mysql 平衡二叉树理解_浅析二分查找,二叉树,平衡二叉树,B树,B+树
热门文章
- Python easy_insatll 安装包
- java集合框架(hashSet自定义元素是否相同,重写hashCode和equals方法)
- web前端(滚动条样式)
- Android开发者指南24难点各个击破—来自androi中文翻译组
- 2009年1月5日 洛基网络教室听课笔记
- iis启动时发生意外错误0x8ffe274的解决方法
- python教程2017百度云_python下载ICCV2017全套paper
- (47)FPGA指数运算符(V代码实现)
- (45)System Verilog 类中变量随机激励约束语法
- Vivado生成bit文件报错彻底解决