synchronized 和 ReentrantLock 有什么区别?

实战 Java 并发编程
实战为导向,从Java 并发原理出发,并集合开发实践,全面剖析 Java 并发编程。
wangxiaoming

synchronized 和 ReentrantLock 有什么区别?

synchronized 最慢,这话靠谱么?

Synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞。Java 5 之前,synchronized 是仅有的同步手段,在代码中,Synchronized 可以用来修饰方法,代码块。

ReentrantLock , 通常翻译为可重入锁,是 Java 5 提供的锁实现,通过代码直接调用 lock() 方法获取代码书写也更加灵活,与此同时,ReentrantLock 提供了很多实用的方法,可以实现很多 synchronized 无法做到的细节控制,但是需要明确调用 unlock()方法释放。

什么是线程安全?

《Java并发编程实战》中定义,线程安全是一个多线程环境下正确性的概念。保证多线程环境下共享的可修改的状态的正确性。这里的状态其实可以看做程序中的数据。

换个角度,如果状态是不共享的, 不可修改的,也就不存在线程安全问题了。

如何保证线程安全

  • 封装: 通过封装,将内部对象隐藏保护起来。
  • 不可变: fina变量产生了某种程度的不可变( immutable)的效果,所以,可以用于保护只读数据,尤其是在并发编程中,因为明确地不能再赋值final变量,有利于减少额外的同步开肖,也可以省去一些防御性拷贝的必要

线程安全要保证几个基本特性

  • 原子性,相关操作不会中途被其他线程干扰,一般通过同步机制实现。
  • 可见性,一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主內存上,v. latile就是负责保
wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付19.90元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值