1.乐观锁

尝试去获得一把锁,无论获得还是无法获得立刻返回True/False 不会阻塞进程,使用此锁可在获取锁的过程中完成其它操作。如下例子演示了在线程1获得了锁之后,线程2使用trylock()可以初始化一些参数,缺点是这里比较消耗CPU资源,使用时建议添加延时并设置尝试次数来限制CPU的使用。

/**
* 乐观锁
*/
public class Lock {public static void main(String[] args) {ReentrantLock reentrantLock = new ReentrantLock();// 线程1new Thread(new Runnable() {@Overridepublic void run() {reentrantLock.lock();System.out.println("获得锁1");try {Thread.sleep(10*1000);} catch (InterruptedException e) {e.printStackTrace();}reentrantLock.unlock(); // 解锁}}).start();// 线程2new Thread(new Runnable() {@Overridepublic void run() {while (!reentrantLock.tryLock()){// 在这里可以做一些事情System.out.println("乐观锁: 生效,初始化参数成功");try {Thread.sleep(2*1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("获得锁2");reentrantLock.unlock();  // 解锁}}).start();}
}

锁生效:trylock初始化参数成功

2.悲观锁

同样是去获取一把锁,而此锁如果获取不到锁就会阻塞,直到获得这把锁,下面的例子演示了进程阻塞

/**
* 悲观锁
*/
public class Lock {public static void main(String[] args) {ReentrantLock reentrantLock = new ReentrantLock();// 线程1new Thread(new Runnable() {@Overridepublic void run() {reentrantLock.lock();System.out.println("获得锁1");try {Thread.sleep(10*1000); // 睡眠10秒模拟阻塞} catch (InterruptedException e) {e.printStackTrace();}reentrantLock.unlock(); // 解锁}}).start();// 线程2new Thread(new Runnable() {@Overridepublic void run() {while (true){System.out.println("线程3运行中");try {Thread.sleep(2*1000);} catch (InterruptedException e) {e.printStackTrace();}}}}).start();// 线程3        new Thread(new Runnable() {@Overridepublic void run() {//reentrantLock.lock();System.out.println("获得锁2");reentrantLock.unlock();  // 解锁}}).start();}
}

运行结果:从结果上看,线程3已经进入了阻塞状态,直达线程1释放了锁才开始工作,缺点:在等待过程中不能做其它事情,如果线程1阻塞则线程2也阻塞,优点:阻塞过程不消耗CPU资源


原文链接:https://blog.csdn.net/qq_40826249/article/details/121348869

Java乐观锁%悲观锁相关推荐

  1. Java锁详解:“独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁+线程锁”

    在Java并发场景中,会涉及到各种各样的锁如公平锁,乐观锁,悲观锁等等,这篇文章介绍各种锁的分类: 公平锁/非公平锁 可重入锁 独享锁/共享锁 乐观锁/悲观锁 分段锁 自旋锁 线程锁 乐观锁 VS 悲 ...

  2. 最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁

    在Java并发场景中,会涉及到各种各样的锁,比如:高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景,这些锁有对应的种类:公平锁,乐观锁,悲观锁等等,这篇文章来详细介绍各种锁的分类: 公 ...

  3. **Java有哪些悲观锁的实现_「Java并发编程」何谓悲观锁与乐观锁,Java编程你会吗...

    何谓悲观锁与乐观锁 悲观锁 乐观锁 两种锁的使用场景 乐观锁常见的两种实现方式 1. 版本号机制 2. CAS算法 乐观锁的缺点 1 ABA 问题 2 循环时间长开销大 3 只能保证一个共享变量的原子 ...

  4. Java 面试 :乐观锁 悲观锁

    乐观锁悲观锁,是为了解决多线程并发操作共享变量可能导致的脏读.幻读和不可重复读等问题 悲观锁 悲观锁,是因为这是一种对数据的修改持有悲观态度的并发控制方式.总是假设最坏的情况,每次读取数据的时候都默认 ...

  5. **Java有哪些悲观锁的实现_阿里秋招Java研发工程师岗:来自校友的面试还原(已拿Offer)...

    前言 本篇题材来自我的校友投稿,他在最近的秋招校招中拿到了蚂蚁金服的实习生Offer,整体思路和面试题目由面试本人--小林提供(译名) 由于作者面试过程中高度紧张,本文中只列出了自己还记得的部分题目. ...

  6. 可重入锁/不可重入锁,公平锁/非公平锁,乐观锁/悲观锁,独享锁/共享锁,偏向锁/轻量级锁/重量级锁,分段锁,自旋锁

    在并发编程中,会涉及到各种各样的锁,这篇文章主要介绍各种锁的分类以及作用. 介绍的内容如下: 可重入锁/不可重入锁 公平锁/非公平锁 乐观锁/悲观锁 独享锁/共享锁 偏向锁/轻量级锁/重量级锁 分段锁 ...

  7. 悲观锁的实现方式java_并发编程--锁--悲观锁和乐观锁

    悲观锁和乐观锁并不是某个具体的"锁"而是一种并发编程的基本概念,是根据看待并发同步的角度.乐观锁和悲观锁最早出现在数据库的设计当中,后来逐渐被 Java 的并发包所引入. 悲观锁 ...

  8. 常见锁策略—乐观锁悲观锁

    目录 1.乐观锁&悲观锁 1.1 乐观锁的定义 1.2 乐观锁的实现(CAS机制) 1.3 乐观锁存在的问题:ABA问题 1.4 悲观锁 2.公平锁&非公平锁 3.读写锁 4.独占锁& ...

  9. 常⻅锁策略(1. 乐观锁 悲观锁2. 公平锁 非公平锁3. 读写锁4. 可重入锁 自旋锁)

    目录 1. 乐观锁 & 悲观锁 1.1乐观锁定义 1.2 乐观锁实现 -- CAS 1.3 悲观锁定义和应⽤ 2. 公平锁 & 非公平锁 3. 读写锁 3.1 读写锁 3.2 独占锁 ...

  10. Mysql之乐观锁悲观锁:乐观锁检查数据状态 悲观锁更新时锁定数据

    1.问题来源 就是一数据表的数据  在两个人同时修改的时候  会出现混乱 例子:如一个字段记录status=1 表示可以下单  货品只有1个的时候    a下单的同时b也下单 : a有修改status ...

最新文章

  1. 使用JPA进行Update操作 @Query注解的用法,JPL
  2. 从一个死锁看mysql innodb的锁机制
  3. android:AlertDialog控件
  4. 基于matlab的智能天线波束方向图仿真,基于MATLAB的智能天线波束方向图仿真
  5. 线性运算和非线性运算
  6. 数据湖,已成为海量数据存储与分析的重要承载方式
  7. linux命令之有关关机和查看系统信息的命令
  8. java实现的判断括号是否成对的代码,()[]{}都可以
  9. SSD:单点多边界框探测器
  10. “燕云十六将”之Grace陈敏(9)
  11. python输出奇数个数_Python实践|输出0-7组成八位奇数总数
  12. python核心教程之min函数怎么使用
  13. 【编程马拉松】【014-红与黑】
  14. 解决(Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:ins)
  15. spring框架_03
  16. 图形学---中点画线法---opengl中实现
  17. 最新仿hao123带后台网址导航源码
  18. java 调用 mahout_使用 Mahout 实现内容分类
  19. DBCO-PEG5-Acrylate DBCO-PEG5丙烯酸盐
  20. 使用webbrowser和win32api破解某宝滑动验证码

热门文章

  1. 基于LabVIEW的基带NRZ矩形波形产生模块以及二进制数字调制系统(2ASK、2FSK、2PSK)以及抗噪声分析(含工程源码、设计报告)
  2. 登录QQ出现R6030-CRT not initialized
  3. Java-判断回文数
  4. chrome浏览器 快捷键设置
  5. 史上最快的内网视频会议部署方案-turbomeeting视频会议系统
  6. 电脑上有哪些好用的视频剪辑软件
  7. python 答题卡识别_opencv+python机读卡识别(最终版)
  8. Microsoft Teams全生命周期会议-03你了解MeetingRoom吗
  9. java 中国象棋下载不用vip,单机象棋手机版免费版下载-单机象棋最新版v1.4.2 不联网版-腾牛安卓网...
  10. MySQL入门:数据库是什么 | SQL是什么 | MySQL是什么