并发中的锁

共享锁和独占锁有什么区别?

  • 共享锁:一把锁可以被多个线程同时获得。
  • 独占锁:一把锁只能被一个线程获得。

线程持有读锁还能获取写锁吗?

  • 在线程持有读锁的情况下,该线程不能取得写锁(因为获取写锁的时候,如果发现当前的读锁被占用,就马上获取失败,不管读锁是不是被当前线程持有)。
  • 在线程持有写锁的情况下,该线程可以继续获取读锁(获取读锁时如果发现写锁被占用,只有写锁没有被当前线程占用的情况才会获取失败)。

读写锁的源码分析,推荐阅读 聊聊 Java 的几把 JVM 级锁 - 阿里巴巴中间件 这篇文章,写的很不错。

读锁为什么不能升级为写锁?

写锁可以降级为读锁,但是读锁却不能升级为写锁。这是因为读锁升级为写锁会引起线程的争夺,毕竟写锁属于是独占锁,这样的话,会影响性能。

另外,还可能会有死锁问题发生。举个例子:假设两个线程的读锁都想升级写锁,则需要对方都释放自己锁,而双方都不释放,就会产生死锁。

大家好,我是xwhking,一名技术爱好者,目前正在全力学习 Java,前端也会一点,如果你有任何疑问请你评论,或者可以加我QQ(2837468248)说明来意!希望能够与你共同进步

相关推荐

  1. 并发

    2024-03-12 08:38:03       43 阅读
  2. 并发编程各类

    2024-03-12 08:38:03       27 阅读
  3. 并发编程-分类

    2024-03-12 08:38:03       33 阅读
  4. 使用分布式解决淘客返利系统并发问题

    2024-03-12 08:38:03       28 阅读
  5. 设计基于并发数据结构

    2024-03-12 08:38:03       38 阅读
  6. Golang 并发 Mutex 互斥使用

    2024-03-12 08:38:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 08:38:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 08:38:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 08:38:03       82 阅读
  4. Python语言-面向对象

    2024-03-12 08:38:03       91 阅读

热门阅读

  1. (C语言)球球大作战

    2024-03-12 08:38:03       36 阅读
  2. R 语言patchwork包拼图间隙

    2024-03-12 08:38:03       43 阅读
  3. 华为机考:HJ2 计算某字符出现次数

    2024-03-12 08:38:03       47 阅读
  4. MFC中字符串string类型和CString类型互转方法

    2024-03-12 08:38:03       38 阅读
  5. AI大语言模型GPT & R 生态环境领域数据统计分析

    2024-03-12 08:38:03       42 阅读
  6. 单调栈的用法

    2024-03-12 08:38:03       46 阅读
  7. 初级爬虫实战——巴黎圣母院新闻

    2024-03-12 08:38:03       41 阅读
  8. 手写redis机制

    2024-03-12 08:38:03       42 阅读
  9. Spring Data访问 MongoDB(十六)----CDI集成

    2024-03-12 08:38:03       41 阅读
  10. 3.11笔记3

    2024-03-12 08:38:03       37 阅读