做教育门户网站法律风险,wordpress 交友主题,dns 解析错误 网站,北京市住房和城乡建设部网站synchronized优化
背景#xff1a;synchronized最初作为Java中的重量级锁#xff0c;开销大#xff0c;不被推荐使用。优化#xff1a;随着JDK的发展#xff0c;特别是JDK1.6以后#xff0c;synchronized经历了优化#xff0c;现在广泛应用于JVM源码和开源框架。
对象…synchronized优化
背景synchronized最初作为Java中的重量级锁开销大不被推荐使用。优化随着JDK的发展特别是JDK1.6以后synchronized经历了优化现在广泛应用于JVM源码和开源框架。
对象锁的四种状态
无锁状态无锁定多线程竞争访问资源只有一个线程能修改成功。偏向锁偏向第一个获取锁的线程减少锁获取的性能开销。轻量级锁当第二个线程访问时偏向锁升级为轻量级锁通过自旋尝试获取锁。重量级锁一个线程获取锁后其余线程阻塞依赖操作系统的Mutex Lock实现。
对象锁的存储
存储位置锁状态存储在对象头的Mark Word中。Mark Word用于存储对象的运行时数据包括锁状态。
Mark Word在不同锁状态下的内容
偏向锁存储偏向线程的ID偏向标志置为1。轻量级锁存储指向线程栈中Lock Record的指针。重量级锁存储指向监视器monitor对象的指针。
synchronized锁升级过程
无锁状态threadid为空所有线程可竞争。偏向锁首次获取资源的线程ID记录在Mark Word中。轻量级锁其他线程尝试获取资源threadid不一致时升级。自旋获取轻量级锁下线程通过自旋尝试获取资源。重量级锁自旋失败后线程阻塞等待资源释放。