锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

多线程中 synchronized 锁升级的原理是什么?

时间:2022-11-24 09:30:00 66zknr6电连接器

文章目录

  • 多线程中 synchronized 升级的原理是什么?
        • synchronized 锁升级原理
        • 升级锁的目的
        • 产生死锁的四个必要条件
  • 关于线程上下文切换
        • 上下文切换
  • 我的学习论坛

多线程中 synchronized 锁升级的原理是什么?

synchronized 锁升级原理

锁对象头内有一个 threadid 第一次访问时,字段 threadid 为空,jvm 让它持有偏向锁,并将 threadid 设置为其线程 id,再次进入时,会先判断 threadid 是否与其线程 id 一致的,如果一致的话,可以直接使用这个对象,如果不一致为轻量级锁,锁是通过一定次数的自旋循环获得的。执行一定次数后,如果没有正常获得要使用的对象,锁将从轻量级升级为重量级锁,这个过程构成 synchronized 锁的升级。

升级锁的目的

锁升级是为了减低了锁带来的性能消耗。在 Java 6 之后优化 synchronized 采用偏向锁升级为轻量级锁后升级为重量级锁,从而降低了锁带来的性能消耗。

产生死锁的四个必要条件

1) 互斥条件:一个资源只能一次访问一个过程。  2) 请求与维护: 当一个过程因要求资源而被阻塞时,已获得的资源将被保留。  3) 不得剥夺:在使用过程中获得的资源不得强行剥夺。  4) 循环等待:循环等待资源关系在几个过程之间形成。  了解死锁的原因,特别是产生死锁的四个必要条件,可以最大限度地避免、预防和 解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确 合理分配资源的算法,避免过程永久占用系统资源。此外,还应防止过程处于等待状态 占用资源。因此,应合理规划资源的分配。 

关于线程上下文切换

上下文切换

在多线程编程中,一般线程的数量大于 CPU 核心数,一个 CPU 为了有效地执行这些线程,核心只能在任何时候使用,CPU 策略是将时间片分配到每个线程并旋转。当一个线程的时间片用完时,它将重新处于就绪状态,供其他线程使用。这个过程属于上下文切换。

综上所述,当前任务已经完成 CPU 在将时间片切换到另一个任务之前,您将首先保存您的状态,以便在下次切换任务时再次加载任务状态。从保存到再加载的任务过程是上下文切换。

由于资金有限,购买的云服务器为1核2G是的,核心是1,它只能在任何时候使用一个线程。运行多线程会导致上下文切换,因此无法实现平行效果。单核运行多线程可能导致执行效率低于单线程,因此不建议在项目中使用多线程。

我的学习论坛

HandsomeForum:用Java写学习论坛,打造自己的圈子!(http://huangjunjie.vip:66)
文章链接(多线程) synchronized 锁升级的原理是什么?http://huangjunjie.vip:66/question/read/nt2pn5mojclyvag1vv
文章链接(关于线程上下文切换):http://huangjunjie.vip:66/question/read/qs7ho1rcy8jqhapi9m

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章