专栏首页InvQ的专栏一句话解释synchronized 锁优化技术以及解释两个线程同时访问synchronized如何保证线程安全

一句话解释synchronized 锁优化技术以及解释两个线程同时访问synchronized如何保证线程安全

主要有: 1.自旋锁——不放弃处理器时间,毕竟为了锁定状态那点时间挂起和回复线程不值得。该功能默认关闭,可自行开启,自旋默认10次,可以自行更改。

2.锁消除——在一些代码上检测到不可能存在共享数据竞争的锁消除(数据流分析,数据不会被其他线程访问到)。stringbuffer对string + 操作的例子,后来用stringbuilder代替了。 3.锁粗化——只在共享数据的实际作用域才进行同步,例如消除for循环中的对象加锁,不如放到整个方法上。 4.轻量级锁——相对互斥同步的阻塞性传统所而言,使用CAS操作避免了使用互斥量的开销,注意,cas是平台相关的指令集。 5.偏向锁 以上内容,涉及到对象头mark word,32位或者64位(视机器而言) 如果32位,25位存储对象哈希码,4位存储对象分代年龄,2位存储锁标志位,1位固定为0。这些都是与对象自身定义的数据无关的额外存储成本

实际,加锁是虚拟机使用CAS操作尝试将对象的mark word更新为Lock record指针,该指针是再代码进入同步块时候,如果此对象没有被锁定(01标志位)的时候,虚拟机再当前线程中的栈帧中创建的。如果该更新成功,那么说明该线程拥有该对象的锁。否则,会检查mark word是否指向当前线程的战阵,如果指向了,那么说明当前线程已经有了这个对象的锁,那就直接可以进入同步块继续执行。否则说明被其他线程抢占了。如果由两条以上的线程竞争同一个锁,那么轻量锁不再有效,要膨胀为重量级锁。

synchronized 关键字,隐式提供了字节码指令monitorenter和monitorexit操作来保证原子性的操作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dubbo 消费者(consumer)线程模型及2.7.1版本问题

    2.7.1的dubbo,默认情况下,消费者在接收返回消息时,会将消息指定到all的Dispatcher中,然后将消息丢入线程池等待调度处理,消费者接收消息使用的...

    MickyInvQ
  • 线程的调度方式——抢占式、非抢占式

    在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统...

    MickyInvQ
  • dubbo 提供者(provider)的线程模型

    如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。

    MickyInvQ
  • Spring Boot 使用WebAsyncTask异步返回结果

    在Spring Boot中(Spring MVC)下请求默认都是同步的,一个请求过去到结束都是由一个线程负责的,很多时候为了能够提高吞吐量,需要将一些操作异步化...

    猿天地
  • 面试必问--synchronized实现原理及锁升级过程你懂吗

    synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的

    Java周某人
  • 初学者第65节生产者消费者(七)

    生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费...

    用户5224393
  • JAVA中常见的API比较

    clone(),equals(),hasCode(),notify(),notifyAll(),toString(), finalize(),wait()

    张凝可
  • 每天一道面试题 | day05

    (1)每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。

    剑走天涯
  • Java 并发编程:AQS 的互斥锁与共享锁

    我们知道现代机器处理器几乎都是多核多线程的,引入多核多线程机制是为了尽可能提升机器整体处理性能。但是多核多线程也会带来很多并发问题,其中很重要的一个问题是数据竞...

    码农架构
  • SpringBoot开发案例之多任务并行+线程池处理

    前几篇文章着重介绍了后端服务数据库和多线程并行处理优化,并示例了改造前后的伪代码逻辑。当然了,优化是无止境的,前人栽树后人乘凉。作为我们开发者来说,既然站在了巨...

    小柒2012

扫码关注云+社区

领取腾讯云代金券