Sychronized 和 Lock 的区别

Sychronized锁入门实例

public class SychronizedDemo {public static void main(String[] args) {SychronizedDemo sychronizedDemo = new SychronizedDemo();sychronizedDemo.deposit(1000);sychronizedDemo.syncmethod();}//同步方法public synchronized void syncmethod(){System.out.println(Thread.currentThread().getName() + " 执行同步方法 ");}//同步代码快public void deposit(long money){long balance = 1000;synchronized (this){try {Thread.sleep(1000);}catch (Exception e){System.out.println("同步失败");e.printStackTrace();}}balance+=money;System.out.println(Thread.currentThread().getName()+"存钱成功,余额为"+balance);}
}

注意事项:

锁的粒度:尽量要减少锁的粒度就是同步的代码的数量。

锁的对象:sychronized 锁,锁的是当前的对象。

可重入性:sychronized 锁,可以让一个线程多次获取锁。

死锁:当使用不恰当会出现死锁。

同步代码块时,sychronized 锁的是当前调用的实例对象

同步方法时,sychronized 锁的是当前调用的实例对象

同步类的静态方法时,sychronized 锁的是当前 Class 类

可以搭配Object 类的 wirte ,notify等方法灵活使用锁

Lock锁实例

public class LockDemo {public static long banlance = 10000;public static void main(String[] args) {LockDemo lockDemo = new LockDemo();lockDemo.lockMethod(1000);System.out.println("账户余额为:"+banlance);}//使用lock锁的同步方法public void lockMethod(long money){ReentrantLock lock = new ReentrantLock();lock.lock();try {System.out.println("线程"+Thread.currentThread().getName()+"开始存款");banlance+=money;}catch (Exception e){System.out.println("线程"+Thread.currentThread().getName()+"存款失败");e.printStackTrace();}finally {lock.unlock();}}
}

注意事项:

  1. 一定要在finally中释放锁。
  2. 可以搭配 condition 对象的 awirte,signal,signalAll 来灵活使用锁

Sychronized 关键字 和 Lock锁的区别

  1. Sychronized 是关键字, Lock 是接口,接口下有 ReentrantLock 和 ReentrantReaderLock,ReentrantWirteLock。
  2. sychronized 自动释放锁, lock手动释放锁。
  3. sychronized 线程1(获取锁),线程2 等待(阻塞),lock 锁的话不一定会出现这种情况(可以采取中断的方式结束等待)
  4. sychronized 是可重入非公平锁,lock 也是可重入非公平锁(不过Lock可以调整)
  5. sychronized 适合少量的代码,lock 适合多量的代码(有try-cacth)

备注:

  • 公平锁就是先来先执行,一个一个的排队。后来的放进队列中,当先来的执行完成后再去队列中唤醒后来的。
  • 非公平锁:不一定按照先来先执行的现象。

我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/8404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony 实战开发 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境:Windows 11 编译环境:Ubuntu 22.04 开发板型号:DAYU 200(RK3568) 系统版本:OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

使用电路仿真软件教学的优势分析

随着科技的飞速发展,电子工程领域对人才的需求与日俱增。为了满足这一需求,教育者们不断探索着更加高效、直观的教学方法。电路仿真软件的出现,为电子工程教学注入了新的活力,它以其独特的优势,成为现代电子工程教育中…

uniapp 小程序低功耗蓝牙配网 blefi配网 物联网

1.获取蓝牙列表 bleList.vue <template><view><button @touchstart="startSearch">获取蓝牙列表</button><scroll-view :scroll-top="scrollTop" scroll-y class="content-pop"><viewclass="bluetoothI…

啸叫抑制器采用什么处理芯片?ES56031或PH56031

会议系统或卡拉OK最头疼的就是啸叫了吧&#xff0c;来看看啸叫抑制器采用什么芯片 四通道啸叫抑制器&#xff0c;采用了2个电路板&#xff0c;每个板子处理2路信号&#xff0c;每块电路板有2个卡侬输入插座&#xff0c;2个卡侬输出插座 ES56031S&#xff0c;该啸叫抑制器为4通道…

某度假村培训体系搭建项目成功案例纪实

——建立分层分类的培训体系&#xff0c;引入场景化培训&#xff0c;确保培训落到实处 【客户行业】文旅行业、酒店行业、文旅企业、度假村 【问题类型】培训体系搭建 【客户背景】 某度假村是一家集住宿、娱乐、健身等服务为一体的综合服务场所&#xff0c;度假村内部环境…

请大数据把我推荐给正在申请小程序地理位置接口的人

小程序地理位置接口有什么功能&#xff1f; 若提审后被驳回&#xff0c;理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;那么遇到这种情况&#x…

[Linux深度学习笔记5.8]

5.8学习笔记 包管理工具rpm: rpm -ivh 软件包名 : 安装rpm包 ---->直接安装网络资源 ​rpm -qa : 查询系统中所有的rpm包 ​rpm -e : 卸载一个rpm包 ​rpm -ql : 查询一个rpm包所生成的所有文件 ​rpm -qf : 查询某一个文件是那个rpm包生成的 ​rpm -qc : 查询一个rpm的配…

软件可靠度计算

软件的整体可靠度依据&#xff1a;若是单个就是当前部件的可靠度。若是多个部件&#xff0c;就需要多个部件的可靠度相乘。若是多个部件且有相同备份&#xff0c;那么计算公式更加不一样。 计算公式&#xff1a; 部件数&#xff1a;N 部件可靠度均为&#xff1a;R 单个部件的可…

树莓派4b测量光照强度

1.BH1750光照强度连接图 2. BH1750工作原理 BH1750的通讯过程 第1步:发送上电命令。 发送的过程和第2步基本一致,把测量命令(0x10)改成上电命令(0x01)。第2步:发送测量命令。 下面图片上的例子,ADDR引脚是接GND的,发送的测量命令是“连续高分辨率测量(0x10)”。 发送数据…

oc渲染器如何设置调渲染更快?oc云渲染加速助力

OC渲染器是Cinema 4D软件中广泛使用的渲染工具&#xff0c;它利用GPU进行硬件加速渲染&#xff0c;具备强大的计算性能。这使得它能够为产品和动画制作人员提供卓越的渲染质量。此外&#xff0c;OC渲染器还支持云渲染技术&#xff0c;这在需要进行大规模渲染任务时非常有用&…

【商业】SD NAND(贴片式TF卡)性能体验及应用

SD NAND【商业】   外观   NAND与TF卡的区别   雷龙CS SD NAND(贴片式TF卡)性能体验及应用   最后 SD NAND 外观正反示意图 NAND与TF卡的区别 什么是SD NAND&#xff1f;它俗称贴片式T卡&#xff0c;贴片式TF卡&#xff0c;贴片式SD卡&#xff0c;贴片式内存卡&am…

【贪心算法】哈夫曼编码Python实现

文章目录 [toc]哈夫曼编码不同编码方式对比前缀码构造哈夫曼编码哈夫曼算法的正确性贪心选择性质证明 最优子结构性质证明 总结 Python实现时间复杂性 哈夫曼编码 哈夫曼编码是广泛用于数据文件压缩的十分有效的编码方法&#xff0c;其压缩率通常为 20 % 20\% 20%到 90 % 90\%…

【C++】——内存管理

&#x1f600;&#x1f600;前言 好久没更新了&#xff0c;五一小长假&#xff0c;有点玩脱了&#xff0c;今天赶紧补一篇博客&#xff0c;回回状态 一 c/c内存分配 下面看下面一段代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; i…

数据可视化训练第一天(matplotlib直线;散点图,随机漫步)

前言 本人自己的练习记录&#xff1b;如有错误请指正&#xff1b; https://matplotlib.org/stable/gallery/lines_bars_and_markers/index.html 官方有许多例子&#xff0c;可以找到自己需要的图像模仿进行绘制 1.一个简单的直线例子 就如同我们学习C语言的第一个helloword时…

C语言从头学03——介绍函数printf

这里先介绍一个C语言的函数printf()。这个函数是我们与计算机交互必须的&#xff0c;否则无法知道我们编写程序的运行结果。 printf()的作用是将参数字符串&#xff08;括号中用双引号引起来的内容&#xff0c;注意双引号必须是英文状态的&#xff09;输出到屏幕。print…

7-1 图图图

某城市有n个景点&#xff0c;部分景点之间有巴士免费来回接送。(1) 给定某个景点x&#xff0c;如果从这个景点出发坐一次免费巴士&#xff0c;可以到达多少个不同的景点&#xff1f;(2) 判断景点a是否可以通过免费巴士&#xff08;可换乘&#xff09;到达景点b&#xff1b;(3) …

STM32 PM2.5(GP2Y1014AU0F)空气质量 传感器

此工程是基于江科大源码的基础上创作&#xff0c;因为pm2.5这个模块比较冷门&#xff0c;参考的代码比较少&#xff0c;所以开源给大家学习参考&#xff01; 功能介绍 GP2Y10传感器模块模块原理&#xff1a;GP2Y1014AU0F是利用光散射发来测量空气中PM2.5的传感器&#xff0c;在…

Java集合进阶——集合体系结构及各个集合的方法

Java种的集合分为单列集合和双列集合&#xff0c;单列集合的最高层接口是Collection&#xff0c;双列集合的最高层是Map&#xff0c;这里先介绍单列集合 单列集合 体系结构&#xff1a; 注&#xff1a;红色框都为接口&#xff0c;蓝色框都为实现类&#xff08;实现类Vector已…

地平线的花样年华

北京车展在这个喧闹的“五一”假期落幕了&#xff0c;它留给我们许多思考。 虽然社会面的传播焦点落在了“网红”两个字上&#xff0c;但技术的更新依然如暗流涌动&#xff0c;给这届北京车展写下注脚。整个过程前后&#xff0c;最重要和吸引了最多目光的&#xff0c;是智驾&a…

什么是驱动数字签名?如何获取驱动数字签名?

Windows 驱动程序承载着计算机实现的各种内核和用户模式功能。如果驱动程序被黑客攻击&#xff0c;可能会产生很多问题。Windows通过数字签名来验证驱动程序包的完整性及发布者的身份。2020年10月的安全更新中&#xff0c;微软加强了对驱动软件的验证&#xff0c;如果Windows无…