资讯专栏INFORMATION COLUMN

Java锁相关知识总结

未东兴 / 2745人阅读

摘要:锁的种类自动锁最常用可以给类方法代码块加锁手动锁,只能锁代码块儿,且需要手动加锁解锁,忘记解锁会造成死锁轻量级锁,不会造成线程阻塞,只能修饰变量,且只能保证变量的修改可见性,无法保证原子性解决死锁的方法尽量使用的方法,设置超时时间,超时可以

锁的种类:

synchronize自动锁(最常用) 可以给类、方法、代码块加锁
lock手动锁,只能锁代码块儿,且需要手动加锁解锁,忘记解锁会造成死锁
volatile轻量级锁,不会造成线程阻塞,只能修饰变量,且只能保证变量的修改可见性,无法保证原子性

解决死锁的方法:

1)尽量使用tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。 
2)尽量使用java.util.concurrent(jdk 1.5以上)包的并发类代替手写控制并发,比较常用的是ConcurrentHashMap、ConcurrentLinkedQueue、AtomicBoolean等等,实际应用中java.util.concurrent.atomic十分有用,简单方便且效率比使用Lock更高 
3)尽量降低锁的使用粒度,尽量不要几个功能用同一把锁 
4)尽量减少同步的代码块

悲观锁与乐观锁

悲观锁用于线程冲突率高的场景,用提前加锁保证线程安全
乐观锁用于线程冲突率底的场景,用修改前后版本号是否一致保证线程安全

未完待续

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74457.html

相关文章

  • 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    摘要:导读阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下。目录一基础篇二进阶篇三高级篇四架构篇五扩 导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己...

    huaixiaoz 评论0 收藏0
  • java

    摘要:多线程编程这篇文章分析了多线程的优缺点,如何创建多线程,分享了线程安全和线程通信线程池等等一些知识。 中间件技术入门教程 中间件技术入门教程,本博客介绍了 ESB、MQ、JMS 的一些知识... SpringBoot 多数据源 SpringBoot 使用主从数据源 简易的后台管理权限设计 从零开始搭建自己权限管理框架 Docker 多步构建更小的 Java 镜像 Docker Jav...

    honhon 评论0 收藏0
  • 史上最全阿里 Java 面试题总结

    摘要:以下为大家整理了阿里巴巴史上最全的面试题,涉及大量面试知识点和相关试题。的内存结构,和比例。多线程多线程的几种实现方式,什么是线程安全。点击这里有一套答案版的多线程试题。线上系统突然变得异常缓慢,你如何查找问题。 以下为大家整理了阿里巴巴史上最全的 Java 面试题,涉及大量 Java 面试知识点和相关试题。 JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节。 S...

    winterdawn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<