3.9、多把锁

2024-06-12 05:32
文章标签 3.9

本文主要是介绍3.9、多把锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多把不相干的锁

一间屋子有两个功能:睡觉、学习,互不相干

现在小南要学习,小女要睡觉,但如果只用一间屋子(一把锁)的话,那么并发度很低

解决方法是准备多个房间(多个对象锁)

例如

@Slf4j(topic = "c.BigRoom")
class BigRoom {public void sleep() {synchronized (this) {log.debug("sleep 2小时");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public void study() {synchronized (this) {log.debug("study 1小时");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

执行

		BigRoom bigRoom = new BigRoom();new Thread(() -> {bigRoom.sleep();},"小南").start();new Thread(() -> {bigRoom.study();},"小女").start();

输出

2022/03/06-18:11:07.948 [小南] c.BigRoom - sleep 2小时
2022/03/06-18:11:09.960 [小女] c.BigRoom - study 1小时

改进

@Slf4j(topic = "c.BigRoom")
class BigRoom {private final Object sleepRoom = new Object();private final Object studyRoom = new Object();public void sleep() {synchronized (sleepRoom) {log.debug("sleep 2小时");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public void study() {synchronized (studyRoom) {log.debug("study 1小时");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

输出

2022/03/06-18:13:35.248 [小南] c.BigRoom - sleep 2小时
2022/03/06-18:13:35.248 [小女] c.BigRoom - study 1小时

将锁粒度细分

  • 好处、可以增强并发度
  • 坏处、如果一个线程同时获得多把锁,就容易发生死锁

这篇关于3.9、多把锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053327

相关文章

MAVEN 3.9.1安装

WIN系统MAVEN 3.9.1安装 1. 下载 下载官网地址:Index of /dist/maven/maven-3 (apache.org) 百度网盘: 通过网盘分享的文件:apache-maven-3.9.1-bin.zip 链接: https://pan.baidu.com/s/1VKmxrU5Hg6mbEUc43wjQUw 提取码: aua6 –来自百度网盘超级会员v5的分

(3.9)进程与线程——获知子进程运行状态改变

文章目录 1.获知子进程状态的信息改变2.僵尸进程3.wait函数4.解析子进程状态改变信息的宏5.调用wait函数之后,父进程可能出现的情况6.等待特定子进程的状态改变7.waitpid 1.获知子进程状态的信息改变 进程的生命周期随着程序加载到内存当中,而产生进程,进程的状态会有:就绪,等待,暂停当一个进程发生特定的状态变化(进程终止、暂停以及恢复)时,内核向其父进程发送S

3.9 共享数据卷volume

文章目录 一、emptyDir类型volume二、hostPath类型volume pod中每个容器都有自己独立的文件系统,文件系统来自镜像,每个容器都是通过在构建镜像时加入的详细配置文件来启动,所以在容器中添加的文件,在容器重启后又会从镜像中重新加载,导致新添加的文件会丢失。k8s提供了volume卷,用于容器之间进行共享文件,容器重启后重新加载卷中的文件数据,所以文件不会丢失。

2.4V转3.8V/3.9V供电升压方案:为水表提供稳定电力

随着科技的不断发展,水表等智能设备在我们的生活中扮演着越来越重要的角色。为了让水表得以正常工作,稳定的电力供应是至关重要的。在这篇文章中,我们将探讨一种2.4V转3.8V/3.9V供电方案,以确保为水表提供稳定的电力。 为了实现2.4V到3.8V/3.9V的电压转换,我们可以采用一款输入电压范围为2.4V至6V的芯片。这款芯片内置有MOS管,采用SOP-8封装,具有输出峰值电流2A的能力。通过这

3.9设计模式——Strategy 策略模式(行为型)

意图 定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换此模式使得算法可以独立于使用它们的客户而变化 结构 Strategy(策略)定义所有支持的算法的公共入口。Context使用这个接口来调用某ConcreteStrategy定义的方法。ConcreteStrategy(具体策略)以Strategy接口实现某个具体算法。Context(上下文)用一个ConcreteStra

你需要知道的 Python 3.10 和 Python 3.9 之间的差异

介绍: 在过去的几十年里,Python 在编程或脚本语言领域为自己创造了一个名字。python 受到高度青睐的主要原因是其极端的用户友好性。Python 还用于处理复杂的程序或编码挑战。机器学习 (ML)、人工智能 (AI) 和数据科学等新兴领域也满足了学习这种语言的高需求。与 Java、C# 和其他语言等传统语言相比,Python 是一种强大的编程语言,迅速成为开发人员、数据科学家和 AI/M

Xamarin For VS 3.9.236 破解

首先下载Xamarin for VS 3.9.236 + XamarinStudio-5.7.0.661 破解补丁的文件: http://download.csdn.net/detail/tornadofeng/8462845   下载完成后,直接将补丁文件覆盖到你的各个安装目录即可: 比如: 我的VS2013和Xamarin Studio安装在D:\Program Files

CentOS 7 的 Python2 升级成 Python 3.9.17

安装Python3.9.17 官网下载地址:https://www.python.org/downlo...   这里选择下载python 3.9.17。 # 下载wget https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tgz# 解压tar -zxf Python-3.9.17.tgz# 安装依赖包yum

3.9 Python格式化字符串

Python格式化字符串(格式化输出) 我们之前讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。 熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的。 print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出,具体请看下

Debian 安装 python 3.9.6

安装相关依赖 sudo apt updatesudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev  下载Python 源码 wget htt