首页 > 其他分享 >忘记LockSupport怎么用了?那我们举个有趣的小例子,永远记住它!

忘记LockSupport怎么用了?那我们举个有趣的小例子,永远记住它!

时间:2023-08-17 18:05:11浏览次数:43  
标签:状态 许可 park LockSupport 取餐 举个 线程 汉堡 有趣

概述

LockSupport是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置让线程阻塞。和Thread.suspend()相比,它弥补了由于resume()在前发生,导致线程无法继续执行的情况。和Object.wait()方法相比,它不需要先获得某个对象的锁,也不会抛出InterruptedException异常

park()可以阻塞当前线程,其中每一个线程都有一个许可,该许可默认为[不可用]

如果该许可是 [可用] 状态,那么park()方法会立即返回,消费这个许可,将该许可变更为 [不可用] 状态,流程代码可以继续执行。

如果该许可是 [不可用] 状态,那么park()方法将会阻塞;unpark()方法,会将指定线程的一个许可变为 [可用] 状态;

举例解释

为了便于大家理解,我们可以举一个场景,就是A同学想要去食堂打饭(买汉堡),那么这个A同学就相当于我们的线程了。

情况1: 当A同学去取汉堡(调用park()方法)的时候,如果取餐台没有汉堡(即:许可为【不可用】状态),则他需要等待(线程阻塞);

情况2: 当A同学去取汉堡(调用park()方法)的时候,如果取餐台有汉堡(即:许可为【可用】状态),则他拿走汉堡去吃饭,取餐台又没有汉堡了(许可从【可用】变为【不可用】状态)

情况3: 当服务员打算去补餐(调用unpark()方法)的时候,发现取餐台没有汉堡(即:许可为【不可用】状态),则他去后厨拿来一个汉堡,放到取餐台上(许可从【不可用】变为【可用】状态)

情况4: 当服务员打算去补餐(调用unpark()方法)的时候,发现取餐台已经有汉堡了(即:许可为【可用】状态),则他就去做别的事情了

为了方便大家理解,请见如下所示:

代码示例

示例一: 先执行**unpark()方法再执行park()**方法,也不会造成永久卡死线程。如下所示:

示例二: LockSupport.park()还能支持中断。但是它不会抛InterruptedException异常。它只会默默的返回,但是我们可以从Thread.interrupted()等方法获得中断标记。 file

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的点赞&分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

标签:状态,许可,park,LockSupport,取餐,举个,线程,汉堡,有趣
From: https://blog.51cto.com/u_15003301/7125883

相关文章

  • Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
    写在前面Python中有许多有趣和强大的模块,其中一个非常有趣的模块就是pynupt。pynupt是基于pynput模块的一个封装,用于控制鼠标和键盘。它可以实现自动化操作和游戏外挂等功能。本文将详细介绍pynupt模块的使用方法和常见的功能。1.安装pynput模块在开始使用pynupt之前,我们需要......
  • Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
    写在前面Python中有许多有趣和强大的模块,其中一个非常有趣的模块就是pynupt。pynupt是基于pynput模块的一个封装,用于控制鼠标和键盘。它可以实现自动化操作和游戏外挂等功能。 本文将详细介绍pynupt模块的使用方法和常见的功能。1.安装pynput模块在开始使用pynupt之前,我们......
  • 有趣的ReadFile函数第4个参数
    最近使用ReadFile对文件进行异步读取时发现微软对于此接口的第4个参数有特别备注win7上此参数不能为空:[out,optional]lpNumberOfBytesRead指向使用同步 hFile 参数时接收读取的字节数的变量的指针。 ReadFile 将此值设置为零,然后再执行任何工作或错误检查。如果这是一个......
  • 一些有趣的组合数学题
    Problem1题意:从\(S=\{1,2,\dots,200\}\)中选出一个集合\(T\),其中\(|T|=100\)且\(\displaystyle\min_{i=1}^{100}T_i<16\),证明对于任意的\(T\)都存在\(i,j\)满足\(1\leqi,j\leq100\),\(i\neqj\)且\(T_i\bmodT_j=0\)。......
  • 关于斐波那契数列的有趣性质--zhengjun
    思路来自这里。\(\operatorname{fib}(1)=\operatorname{fib}(2)=1,\operatorname{fib}(n)=\operatorname{fib}(n-1)+\operatorname{fib}(n-2),n\ge3\)那么:\(\sum\limits_{i=1}^n\operatorname{fib}^2(i)=\operatorname{fib}(n)\operatorname{fib}(n+1)\)可以考虑一下几......
  • 一些有趣的C++代码
    本文混合搅碎剁烂转载。。。 1:绘制曲线 #include<bits/stdc++.h>usingnamespacestd;intmain(){intx,m;for(doublei=1;i>=-1;i-=0.1){m=acos(i)*10;for(x=1;x<m;x++)cout<<"";cout<&l......
  • 测试中发现的一个有趣的小问题!
    测试中发现的一个小问题,感觉挺有趣记录一下!问题描述:在业务测试过程中,我们在mysql使用的一个字段值类型为int类型,然后再测试极值的情况下,我输入10个9发现可以正常提交数据并保存成功,然而当再次进入配置的时候发现保存的值并非10个9而是变为了1410065407。然后自己通过抓包发现在......
  • 一个有趣的问题
    给定\(N\)个数\(A_1,\cdots,A_N\),问可不可以把它们分成两组,使得两组的和相同。没有数据范围。有一个很简单的dp方法,\(dp_{i,x}|=dp_{i-1,x-a_i}\)。看\(dp_{n,\frac{sum}{2}}\)是否为\(1\)。时间复杂度\(O(N\times\sum_{i=1}^{N}A_i)\)。code#include<bits/stdc......
  • 有趣的密码学之散列函数,你了解多少
    任何形式的网络服务都存在安全风险,如何将风险降到最低是互联网普遍关注的问题。通常,网络安全措施的实现方法有数据加密、数字签名、身份认证、防火墙和入侵检测等。其中数据加密是防止未经授权的用户访问敏感信息的手段,而研究数据加密的科学我们称之为密码学(Cryptography)。密码学......
  • python数据分析项目有趣 新零售-无人智能售货机商务数据分析
        嗨喽!大家好,我是“流水不争先,争得滔滔不绝”的翀,18双非本科生一枚,正在努力!欢迎大家来交流学习,一起学习数据分析,希望我们一起好好学习,天天向上,目前是小社畜一枚~~项目名称新零售无人智能售货机1.数据探索1.1数据读取1.2设备编号1.3订单编号1.4支付状态1.5收款方2.......