当前位置: 首页 > wzjs >正文

做网站 服务器个人博客网站设计

做网站 服务器,个人博客网站设计,支持html5的网站,威海做网站的公司有哪些Java并发编程:synchronized与Lock深度对比 基本概念 1.1 synchronized synchronized是Java内置的关键字,属于JVM层面的锁机制。它通过对象监视器(Monitor)实现同步,具有自动获取和释放锁的特性。 // 同步方法 public synchronized void sy…

Java并发编程:synchronized与Lock深度对比

  1. 基本概念

1.1 synchronized
synchronized是Java内置的关键字,属于JVM层面的锁机制。它通过对象监视器(Monitor)实现同步,具有自动获取和释放锁的特性。

// 同步方法
public synchronized void syncMethod() {// 代码
}// 同步代码块
public void method() {synchronized(this) {// 代码}
}

1.2 Lock
Lock是Java并发包(java.util.concurrent.locks)提供的接口,属于API层面的锁机制。最常用的实现类是ReentrantLock

private Lock lock = new ReentrantLock();public void method() {lock.lock();try {// 代码} finally {lock.unlock(); // 必须手动释放}
}
  1. 核心区别对比
特性synchronizedLock (ReentrantLock)
实现方式JVM内置关键字Java类库实现
锁获取/释放自动手动(lock()/unlock())
锁类型非公平锁可配置公平/非公平锁
可中断性不可中断支持(lockInterruptibly())
尝试获取锁不支持支持(tryLock())
超时机制不支持支持(tryLock(time, unit))
条件变量单一条件(wait/notify)多条件(newCondition())
性能JDK6后优化,低竞争时性能好高竞争时性能更优
锁粒度方法或代码块级别可更细粒度控制
  1. 底层原理

3.1 synchronized实现
• 锁升级机制:偏向锁→轻量级锁→重量级锁

• 对象头Mark Word存储锁状态

• Monitor机制:每个对象关联一个Monitor,包含_EntryList和_WaitSet

3.2 Lock实现
• 基于AQS(AbstractQueuedSynchronizer)框架

• 使用CLH队列管理等待线程

• 支持公平/非公平两种获取锁方式

  1. 高级特性

4.1 Lock特有功能

// 1. 尝试获取锁
if (lock.tryLock()) {try {// 获取锁成功} finally {lock.unlock();}
}// 2. 可中断获取锁
try {lock.lockInterruptibly();// ...
} catch (InterruptedException e) {// 处理中断
}// 3. 多条件变量
Condition notFull = lock.newCondition();
Condition notEmpty = lock.newCondition();

4.2 synchronized优化
• 锁消除:JVM检测到不可能存在共享数据竞争时消除锁

• 锁粗化:将连续的同步块合并为一个更大的同步块

• 自适应自旋:根据历史数据动态调整自旋次数

  1. 使用场景建议

优先使用synchronized
• 简单的同步需求

• 锁的获取和释放在同一方法内

• 不需要高级功能(如超时、中断等)

选择Lock的情况
• 需要公平锁

• 需要尝试非阻塞获取锁

• 需要多个条件变量

• 锁需要在多个方法间传递

• 高竞争环境下对性能有更高要求

  1. 实际案例

6.1 生产者-消费者模型(Lock实现)

class Buffer {private final Lock lock = new ReentrantLock();private final Condition notFull = lock.newCondition();private final Condition notEmpty = lock.newCondition();public void produce() {lock.lock();try {while (isFull()) {notFull.await();}// 生产...notEmpty.signal();} finally {lock.unlock();}}
}

6.2 单例模式(synchronized实现)

class Singleton {private static volatile Singleton instance;public static Singleton getInstance() {if (instance == null) {synchronized(Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}
  1. 总结

synchronizedLock都是Java中实现线程同步的有效机制,各有优缺点。理解它们的底层原理和适用场景,才能在实际开发中做出合理选择。对于大多数简单场景,synchronized已经足够;当需要更灵活的锁控制时,Lock是更好的选择。


文章转载自:

http://jaxyoF4k.dghLr.cn
http://gSlttnB1.dghLr.cn
http://lLQZAr4r.dghLr.cn
http://y0joYgr6.dghLr.cn
http://QmLVGqwy.dghLr.cn
http://dQZq3YSF.dghLr.cn
http://ijImqSKH.dghLr.cn
http://SyERRXZ2.dghLr.cn
http://uujMdAXK.dghLr.cn
http://JMwAS11K.dghLr.cn
http://vOt2A8TR.dghLr.cn
http://n6ld58s3.dghLr.cn
http://0QW3Dj4L.dghLr.cn
http://gv6fx7ax.dghLr.cn
http://LgJf40dD.dghLr.cn
http://9Kr70M22.dghLr.cn
http://64MJs47q.dghLr.cn
http://n9luYly9.dghLr.cn
http://LxdeGESE.dghLr.cn
http://MJjkreYV.dghLr.cn
http://ZxLih2Gi.dghLr.cn
http://u0ITr39q.dghLr.cn
http://yoh5U7RT.dghLr.cn
http://7XqYf2Tg.dghLr.cn
http://q8jQUVxx.dghLr.cn
http://rJ5LLcE5.dghLr.cn
http://CDd8aJ4l.dghLr.cn
http://vtsVSxoO.dghLr.cn
http://8co5Vu8h.dghLr.cn
http://eJDEJefO.dghLr.cn
http://www.dtcms.com/wzjs/616008.html

相关文章:

  • 网页的网站建设在哪里萍乡做网站
  • 中山手机网站设计网站建设公司要多少钱
  • 建设软件资源网站北京做网站好的网站建设公司
  • 网站要怎么盈利一个网站能卖多少钱?
  • 徐州营销型网站建设安康网站开发
  • 如何做一网站首页石家庄做外贸的网站建设
  • 品牌网站建设黑白I狼J做亚马逊和淘宝网站
  • wordpress 双栏主题网站关键词排名手机优化软件
  • 牡丹江做网站的公司天助可以搜索别人网站
  • 行业资讯网站源码电商系统的服务商
  • 营销型网站建设策划书万网董事长是谁
  • 网站制作公司官网首页外贸公司网站建设
  • 营销网站建设培训做网站需要编程吗
  • 网站优化要做哪些工作网站排名配色
  • 中小企业网站用什么技术如何建设股权众筹网站
  • 电子商务网站开发的流程图网站模板下载百度云链接怎么做
  • 大连市城乡建设档案馆网站大型网页设计服务公司
  • 摄影作品发布平台更新网站 seo
  • 商业空间设计案例商用营销型网站建设优化建站
  • 网站建立策划书无印良品官方网络商城
  • 呼和浩特网站建设价格深圳和胜建设公司
  • 中国石油工程建设有限公司网站网站上职业学校排名 该怎么做
  • 开发制作小程序公司seo企业顾问
  • 苏州企业建站系统菏泽百度网站建设
  • 廊坊网站推广外包网站怎么做浏览量才会多
  • dede织梦做的网站 栏目页有切换js 怎么循环子栏目 调子栏目青岛建站软件
  • 网站建设公司运营模式聊城开发区建设局网站
  • 微信公众号上微做网站邯郸企业做网站费用
  • 贵阳网站建设哪家好方舟盐城专业网站建设哪家好
  • 商城网站 免费开源深圳专业建设网站