synchronize和Lock锁的区别

2023-10-31

为什么java已经通过synchronized关键字实现同步访问了,还需要提供Lock?

synchronized的缺陷

前面博客有提到过释放对象的锁有两种情况:

  • 程序执行完同步代码块会释放代码块。
  • 程序在执行同步代码块是出现异常,JVM会自动释放锁去处理异常。

如果获取锁的线程需要等待I/O或者调用了sleep()方法被阻塞了,但仍持有锁,其他线程只能干巴巴的等着,这样就会很影响程序效率。
因此就需要一种机制,可以不让等待的线程已知等待下去,比如值等待一段时间或响应中断,Lock锁就可以办到。

再举个例子:当有多个线程读写文件时,读操作和写操作会发生冲突现象,写操作和写操作会发生冲突现象,但是读操作和读操作不会发生冲突现象。但是采用synchronized关键字来实现同步的话,就会导致一个问题:如果多个线程都只是进行读操作,所以当一个线程在进行读操作时,其他线程只能等待无法进行读操作。
因此就需要一种机制来使得多个线程都只是进行读操作时,线程之间不会发生冲突,通过Lock就可以办到。
另外,Lock可以知道线程有没有得到锁,而synchronized不能。

总结区别

总结来说,Lock与synchronized有以下区别:

  1. Lock是一个接口,而synchronized是关键字。
  2. synchronized会自动释放锁,而Lock必须手动释放锁。
  3. Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。
  4. 通过Lock可以知道线程有没有拿到锁,而synchronized不能。
  5. Lock能提高多个线程读操作的效率。
  6. synchronized能锁住类、方法和代码块,而Lock是块范围内的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

synchronize和Lock锁的区别 的相关文章

  • 打工人都在用的AI工具

    随着ChatGPT的问世 AI也算迎来了高光时刻 下文是技术宅整理的一些和ChatGPT相关的工具应用 排名不分先后 也不代表个人推荐 但真心真心好好用 主打的就是一个纯粹 本文将先分享10个有趣的AI小工具 最后3个小工具 是我们搬砖人心

随机推荐

  • 将纯黑的arcgis语义分割标签(单类别)(tif、png格式)转为黑白

    做建筑物分割 用arcgis做出来的标签 tif 为纯黑 转为png格式后也是纯黑 虽然在arcgis中可以正常显示 且不影响模型训练 但是的确有那么点不好看 参考其他数据集 单类别表标签均为黑白二值图 0 255 arcgis做的标签为纯
  • 【pygame入门】pygame游戏实例入门级教程,如有不懂欢迎随时补充留言。

    开发环境 pycharm anconda3 第三方库 pygame 从标题看这句略显多余 第三方库安装 方法一 直接在pycharm里面安装 files gt seting gt project gt python Interpreter
  • 如何才能成为一个成熟的投资者?

    股市从来不缺少一年十倍 百倍的故事 但是真的能够长年稳定盈利的人 其实少之又少 所以很多人都称之为赌场 在赌场暴富是有可能的 但是能够笑着离开的人确少之又少 笔者自己也经历过很多大起大落 如今慢慢觉得摸到了一些门道 在这里和大家一起探讨 如
  • AS 添加AAR 文件 Gradle 7.0+ 设置aar路径失败问题

    https blog csdn net a940659387 article details 120514674
  • 数据结构小白之二叉树的遍历和查找

    1 存储方式的分析 1 1 数组储存方式的分析 优点 通过下标的访问 速度快 还可以使用二分法提高检索的速度 缺点 如果要检索某个值 或者插入值 整个数组就会进行移动 从而造成较低的效率 同时如果需要扩容的话 从底层而言 每一次数组的扩容就
  • 区块链技术将如何改变制造业?对制造业的价值何在?

    作为虚拟货币的底层技术 区块链正风生水起 目前区块链技术的应用场景在不断拓展 成为全球创新企业关注的热点 目前区块链的主要应用还是集中于金融支付领域 比如跨境支付 股票交易 身份确认等 作为一种分布式记帐技术 区块链正在改变金融业 而且它也
  • 11月26日 创建敌人血量UMG,游戏分数和游戏时间UMG,人物开始位置与不同的游戏模式,控制台功能治愈 ,杀死AI

    C 创建敌人血量UMG 新建一个USERUMG的Class类 h Fill out your copyright notice in the Description page of Project Settings pragma once
  • 普元SOA相关概念

    SOA 面向服务的体系结构 Service oriented architecture 是构造分布式计算的应用程序的方法 它将应用程序功能作为服务发送给最终用户或者其他服务 BPS 普元业务流程平台套件Primeton BPS Busine
  • 初学gitlab设置访问权限

    写本文的目的是 能够实现开发代码共享 1 打开一个项目your project 主界面如下图所示 2 将gitlab项目私有设置为内部 在左侧工具栏中找到Setting 并点进去 将Project visibility设置为Internal
  • 快捷键常识及JDK配置

    进制之间的转换 十进制 0 1 2 3 4 5 6 7 8 9 二进制 0 1 八进制 0 1 2 3 4 5 6 7 十六进制 0123456789ABCDEF 其他进制转十进制 数字 进制 当前位数 1 数字 进制0 二进制 转换 十进
  • 基于STM32单片机电子称重系统设计_最终稿

    摘 要 称重技术自古以来便被人们所重视 与我们生活的各个方面息息相关 电子称重技术能够在科学研究 工业生产制造及其他生产和日常生活中得到广泛应用 随着科学技术时代的来临 智能化的仪器已经取代了传统的仪表和控制设备 让我们的传统仪器也有了翻天
  • springboot读取模版文件

    前言 resources下的template目录下的模版文件 第一种 第二种 第三种 templateDir template 第一种 Resource resource new ClassPathResource templateDir
  • ubuntu安装docker

    如果之前有的朋友安装了Docker 不成功的 可以先卸载旧的版本 sudo apt get remove docker docker engine docker io containerd runc 没安装的朋友 可以不用执行 一 安装前的
  • 第十三届蓝桥杯青少组省赛Python真题,包含答案

    目录 一 选择题 二 编程题 第十三届蓝桥杯青少组省赛Python真题 包含答案 一 选择题 第 1 题 单选题 下列关于函数的说法正确的是 答案 C 第 2 题 单选题 十进制数55转换成十六进制是 答案 C 第 3题 单选题 下列方法中
  • Netty应用UDP协议

    UDP是用户数据报协议 User Datagram protocol 的简称 其主要作用是将网络数据封装成数据报形式 提供面向服务的简单信息传送服务 与TCP协议不同 UDP协议直接利用IP协议进行UDP数据报的传输 UDP提供的是面向无连
  • 记一次非常非常坑的springboot整合mybatisplus报错

    11 11 41 493 main DEBUG org springframework boot test context SpringBootTestContextBootstrapper Neither ContextConfigura
  • 基础技术篇 9 ——物联网常见通信协议与通讯协议梳理【上】- 通讯协议

    1 通信 与 通讯 傻傻分得清 传统意义上的 通讯 主要指电话 电报 电传 通讯的 讯 指消息 Message 媒体讯息通过通讯网络从一端传递到另外一端 媒体讯息的内容主要是话音 文字 图片和视频图像 其网络的构成主要由电子设备系统和无线电
  • 校园网Drcom自动登录脚本(OpenWRT适用)

    本文原文已发表至本人博客 哔哔哔哔 校园网Drcom自动登录脚本 OpenWRT适用 前言 优雅地登录校园网认证Dr com D版 Step1 连接校园网 打开Chrome并进入校园网认证界面 F12进入开发者模式 勾选Network 再勾
  • 基于EasyExcel的Excel读取

    1 引入依赖
  • synchronize和Lock锁的区别

    为什么java已经通过synchronized关键字实现同步访问了 还需要提供Lock synchronized的缺陷 前面博客有提到过释放对象的锁有两种情况 程序执行完同步代码块会释放代码块 程序在执行同步代码块是出现异常 JVM会自动释