12、synchronized和Lock的使用

1、多并发案例:

一个车站有三个窗口同时卖30张票,每个窗口都有40个人在排队买票,在多线程情况下,不加锁,线程不安全,导致卖票不准确

2、使用锁:

解决上面的线程不安全的问题,可以通过加锁的方式

使用synchronized,在卖票的方法加synchronized关键字,表示对是整个方法范围内对当前对象的加锁

使用Lock,一共三步

——》创建锁
——》加锁
——》解锁

3、synchronized和Lock的区别:

(1)、synchronized是内置的Java关键字;Lock是一个接口

(2)、synchronized无法判断获取锁的状态;Lock可以

(3)、synchronized会自动释放锁;Lock必须手动释放锁,如果不释放,就会出现死锁

(4)、synchronized多个线程获取同一个锁,其中一个线程已经获取锁,但发生阻塞,其他线程就会一直等待;Lock不一定等待下去

(5)、synchronized是可重入锁,不可以中断的,非公平;Lock也是可重入锁,可以判断锁,默认非公平(可以设置公平)

(6)、synchronized适合锁少量代码同步;Lock适合锁大量同步代码

Original: https://www.cnblogs.com/Iven-L/p/16576217.html
Author: 爱文(Iven)
Title: 12、synchronized和Lock的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575705/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 设计模式之简单工厂

    一、简单工厂:为了客户类和服务类之间的解耦,把对象的创建任务交给第三方类,这个第三方类就充当工厂的作用,严格来说简单工厂不属于23种设计模式之一。 二、实现思路 :创建一个简单工厂…

    数据库 2023年6月14日
    075
  • 为Typora配置Gitee图床

    安装Typora 官网下载直接安装:https://www.typora.io/#download 编辑Typora图像设置 说明: 打开:文件–>偏好设置&#8…

    数据库 2023年6月11日
    0148
  • MySQL第1章——数据库概述

    数据库概述 为什么要使用数据库 什么是数据持久化? 数据持久化是将数据保存到可切换的存储设备中以备后用。在大多数情况下,尤其是在企业应用中,数据持久化指的是将内存中的数据保存到硬盘…

    数据库 2023年5月24日
    079
  • 【likeshop】回收租凭系统100%开源无加密 商城+回收+租赁

    likeshop回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 系统支持智能评估回收价格,后台调整最终回收价,用户同意回收后系统即刻放款,用户微信零钱提现。支持在线…

    数据库 2023年6月14日
    065
  • 线程池执行流程图

    public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeU…

    数据库 2023年6月16日
    0117
  • Python–软件目录结构

    目的不必多说:提高项目可读性、可维护性 软件目录结构示例: 那么问题来了,当类似于如上的目录结构时,我怎么在game.py中去调用setting.py或者main.py中的函数呢?…

    数据库 2023年6月9日
    079
  • 数据结构入门之单链表代码实现(java)

    1:单链表是: 单链表是一种链式存取的 数据结构 用一组地址任意的 存储单元 存放线性表中的数据元素。 链表中的数据是以结点来表示的,每个结点的构成:元素 ( 数据元素 的映象) …

    数据库 2023年6月6日
    093
  • Array源码刨析

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    072
  • 精心总结十三条建议,帮你创建更合适的MySQL索引

    上篇文章讲到使用MySQL的Explain命令可以分析SQL性能瓶颈,优化SQL查询,以及查看是否用到了索引。 我们都知道创建索引可以提高查询效率,但是究竟如何创建索引呢? [En…

    数据库 2023年5月24日
    088
  • PHP array_count_values()

    array_count_values array_count_values() 函数用于统计数组中所有值出现的次数。 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数…

    数据库 2023年6月14日
    066
  • Python 垃圾回收总结

    前言 最近在阅读《垃圾回收的算法与实现》,里面将讲到了一些常用的垃圾回收(Garbage Collect)算法,如:标记-清除、引用计数、分代回收等等。后面讲到了 Python 的…

    数据库 2023年6月6日
    094
  • Git的常见命令

    Git 一、git环境安装 1.初始化本地仓库: git init 2.将本地仓库跟远程仓库建立连接:git remote add name path ​ git clone pa…

    数据库 2023年6月16日
    077
  • Qt 的事件监听和事件过滤

    Qt 产品级的开发项目中经常会用到一些自定义控件,从而达到一些可定制化的效果,这时候往往需要重写它的监听事件,满足产品的需求。这里用一个简单的例子记录一下思路: 新建一个DiyLa…

    数据库 2023年6月16日
    084
  • 三道MySQL联合索引面试题,淘汰80%的面试者,你能答对几道

    众所周知MySQL 联合索引遵循最左前缀匹配原则,在少数情况下也会不遵循(有兴趣,可以翻一下上篇文章)。 创建 联合索引的时候,建议优先把区分度高的字段放在第一列。 至于如何计算分…

    数据库 2023年5月24日
    060
  • jmeter-操作mysql

    1. 环境:jmeter5.3,mysql5.7。 提取码:ZHEN 3. 操作 ①. 测试计划内导入jdbcjar包 ②. jmeter内添加👉线程组,点击”添加→配…

    数据库 2023年6月14日
    078
  • 实时流计算—数据采集工具Flume

    Flume最早是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。 Flume特性 1.提供上下文路由特征 2.Flume的管道是基于事务,保证…

    数据库 2023年6月6日
    0256
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球