html5手机 网站怎样修改公司网站内容

张小明 2025/12/29 8:38:08
html5手机 网站,怎样修改公司网站内容,91福利社区wordpress,二级网站有什么好处文章目录 引言synchronized的基本使用同步方法同步代码块 synchronized的底层原理字节码层面分析对象头与Mark Word 锁升级优化过程1. 偏向锁#xff08;Biased Locking#xff09;2. 轻量级锁#xff08;Lightweight Locking#xff09;3. 重量级锁#xff08;Heavyweigh…文章目录引言synchronized的基本使用同步方法同步代码块synchronized的底层原理字节码层面分析对象头与Mark Word锁升级优化过程1. 偏向锁Biased Locking2. 轻量级锁Lightweight Locking3. 重量级锁Heavyweight Locking实战中的最佳实践1. 锁粒度控制2. 避免死锁3. 双检锁单例模式性能优化建议1. 减少锁持有时间2. 使用读写锁替代常见问题与解决方案1. synchronized与Lock的区别2. 如何选择锁策略总结引言线程安全是我们必须面对的核心挑战之一。Java为我们提供了synchronized关键字。synchronized的基本使用同步方法同步方法是最简单的使用方式直接在方法声明中添加synchronized关键字即可publicclassCounter{privateintcount0;// 同步实例方法publicsynchronizedvoidincrement(){count;}// 同步静态方法publicstaticsynchronizedvoidstaticIncrement(){// 静态方法的锁是类的Class对象}}代码说明实例方法的锁是当前对象实例this静态方法的锁是当前类的Class对象同步方法保证了同一时间只有一个线程能执行该方法同步代码块同步代码块提供了更细粒度的控制可以指定锁对象publicclassOrderService{privatefinalObjectlocknewObject();privateMapString,IntegerinventorynewHashMap();publicvoidprocessOrder(StringproductId){// 非同步代码可以并发执行System.out.println(开始处理订单...);synchronized(lock){// 同步代码块保证库存操作的原子性Integerstockinventory.get(productId);if(stock!nullstock0){inventory.put(productId,stock-1);System.out.println(扣减库存成功);}}// 后续非同步操作System.out.println(订单处理完成);}}代码说明可以指定任意对象作为锁锁的范围更小性能更好提供了更灵活的同步控制synchronized的底层原理字节码层面分析让我们通过反编译来看看synchronized在字节码层面是如何实现的publicclassSynchronizedDemo{privatestaticintcounter0;privatefinalObjectlocknewObject();publicvoidsyncMethod(){synchronized(this){counter;}}}使用javap -c SynchronizedDemo.class反编译后可以看到关键字节码public void syncMethod(); Code: 0: aload_0 1: dup 2: astore_1 3: monitorenter // 进入同步块 4: getstatic #2 // 获取counter 7: iconst_1 8: iadd 9: putstatic #2 // 设置counter 12: aload_1 13: monitorexit // 正常退出同步块 14: goto 22 17: astore_2 18: aload_1 19: monitorexit // 异常退出同步块 20: aload_2 21: athrow 22: return关键点解析monitorenter获取对象的监视器锁monitorexit释放对象的监视器锁编译器会自动生成异常处理确保锁一定会被释放对象头与Mark Word在HotSpot虚拟机中每个对象都有一个对象头其中包含Mark Word它记录了对象的锁状态信息锁状态存储内容标志位无锁对象哈希码、分代年龄01偏向锁线程ID、Epoch、分代年龄01轻量级锁指向栈中锁记录的指针00重量级锁指向互斥量monitor的指针10GC标记空11锁升级优化过程JDK 1.6之后synchronized引入了锁升级机制来优化性能1. 偏向锁Biased LockingpublicclassBiasedLockExample{privatestaticfinalObjectlocknewObject();privatestaticintcount0;publicstaticvoidmain(String[]args)throwsInterruptedException{// 默认情况下JVM会延迟开启偏向锁Thread.sleep(5000);// 等待偏向锁开启synchronized(lock){count;System.out.println(第一次获取锁应该是偏向锁);}}}偏向锁特点适用于只有一个线程访问同步块的场景在对象头中记录线程ID同一个线程再次获取锁时不需要CAS操作2. 轻量级锁Lightweight Locking当有第二个线程尝试获取锁时偏向锁会升级为轻量级锁publicclassLightweightLockExample{privatestaticfinalObjectlocknewObject();publicstaticvoidmain(String[]args){// 线程1newThread(()-{synchronized(lock){try{Thread.sleep(100);// 短暂持有锁}catch(InterruptedExceptione){e.printStackTrace();}}}).start();// 线程2 - 会触发锁升级newThread(()-{try{Thread.sleep(10);// 确保线程1先获取锁}catch(InterruptedExceptione){e.printStackTrace();}synchronized(lock){System.out.println(线程2获取锁此时应该是轻量级锁);}}).start();}}轻量级锁特点使用CAS操作替代操作系统互斥量适用于线程交替执行的场景自旋等待避免线程切换开销3. 重量级锁Heavyweight Locking当竞争激烈时轻量级锁会升级为重量级锁publicclassHeavyweightLockExample{privatestaticfinalObjectlocknewObject();privatestaticfinalintTHREAD_COUNT10;publicstaticvoidmain(String[]args){CountDownLatchlatchnewCountDownLatch(THREAD_COUNT);for(inti0;iTHREAD_COUNT;i){newThread(()-{synchronized(lock){try{// 模拟业务处理Thread.sleep(50);}catch(InterruptedExceptione){e.printStackTrace();}}latch.countDown();}).start();}try{latch.await();System.out.println(所有线程执行完成经历了锁升级过程);}catch(InterruptedExceptione){e.printStackTrace();}}}重量级锁特点使用操作系统的互斥量Mutex线程会进入阻塞状态适用于高竞争场景实战中的最佳实践1. 锁粒度控制在商城项目中库存管理需要特别注意锁的粒度publicclassInventoryManager{// 不好的做法锁粒度太粗privatefinalObjectglobalLocknewObject();privateMapString,IntegerinventorynewConcurrentHashMap();// 好的做法细粒度锁privatefinalMapString,ObjectproductLocksnewConcurrentHashMap();publicvoidupdateStock(StringproductId,intquantity){// 获取商品特定的锁ObjectproductLockproductLocks.computeIfAbsent(productId,k-newObject());synchronized(productLock){IntegercurrentStockinventory.getOrDefault(productId,0);inventory.put(productId,currentStockquantity);}}publicbooleanpurchase(StringproductId,intquantity){ObjectproductLockproductLocks.computeIfAbsent(productId,k-newObject());synchronized(productLock){IntegercurrentStockinventory.get(productId);if(currentStocknull||currentStockquantity){returnfalse;}inventory.put(productId,currentStock-quantity);returntrue;}}}2. 避免死锁在营销系统的奖品发放中要特别注意避免死锁publicclassPrizeDistribution{privatefinalObjectprizeLocknewObject();privatefinalObjectuserLocknewObject();// 错误的做法可能产生死锁publicvoiddistributePrizeWrong(longuserId,StringprizeId){synchronized(prizeLock){synchronized(userLock){// 处理奖品发放}}}// 正确的做法固定锁顺序publicvoiddistributePrizeRight(longuserId,StringprizeId){// 按照固定顺序获取锁ObjectfirstLock,secondLock;if(System.identityHashCode(prizeLock)System.identityHashCode(userLock)){firstLockprizeLock;secondLockuserLock;}else{firstLockuserLock;secondLockprizeLock;}synchronized(firstLock){synchronized(secondLock){// 安全的奖品发放逻辑System.out.println(为用户userId发放奖品prizeId);}}}}3. 双检锁单例模式在项目配置管理中单例模式经常使用publicclassConfigManager{// volatile保证可见性和禁止指令重排序privatestaticvolatileConfigManagerinstance;privateConfigManager(){// 私有构造函数}publicstaticConfigManagergetInstance(){if(instancenull){// 第一次检查synchronized(ConfigManager.class){if(instancenull){// 第二次检查instancenewConfigManager();}}}returninstance;}}为什么需要volatile防止指令重排序保证多线程环境下的可见性避免其他线程看到未完全初始化的对象性能优化建议1. 减少锁持有时间publicclassOptimizedOrderProcessor{privateMapString,BigDecimalpricesnewHashMap();privateMapString,IntegerstocknewHashMap();// 优化前锁持有时间过长publicBigDecimalcalculateTotalBad(ListStringproducts){synchronized(this){BigDecimaltotalBigDecimal.ZERO;for(Stringproduct:products){// 模拟耗时操作try{Thread.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}totaltotal.add(prices.getOrDefault(product,BigDecimal.ZERO));}returntotal;}}// 优化后只锁必要的部分publicBigDecimalcalculateTotalGood(ListStringproducts){// 先收集需要的数据不需要同步ListBigDecimalpriceListnewArrayList();for(Stringproduct:products){// 模拟耗时操作try{Thread.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}}// 同步计算总和synchronized(this){BigDecimaltotalBigDecimal.ZERO;for(Stringproduct:products){totaltotal.add(prices.getOrDefault(product,BigDecimal.ZERO));}returntotal;}}}2. 使用读写锁替代对于读多写少的场景考虑使用ReentrantReadWriteLockpublicclassProductCache{privatefinalMapString,ProductcachenewHashMap();privatefinalReentrantReadWriteLockrwLocknewReentrantReadWriteLock();publicProductgetProduct(Stringid){rwLock.readLock().lock();// 获取读锁try{returncache.get(id);}finally{rwLock.readLock().unlock();}}publicvoidupdateProduct(Productproduct){rwLock.writeLock().lock();// 获取写锁try{cache.put(product.getId(),product);}finally{rwLock.writeLock().unlock();}}}常见问题与解决方案1. synchronized与Lock的区别特性synchronizedReentrantLock实现机制JVM层面实现JDK层面实现锁获取自动获取释放手动获取释放可中断不支持支持公平锁非公平可选公平/非公平条件变量有限支持灵活支持2. 如何选择锁策略根据实际场景选择合适的同步机制publicclassLockStrategySelector{/** * 根据场景选择锁策略 * param scenario 场景描述 * return 建议的锁策略 */publicStringselectLockStrategy(Stringscenario){switch(scenario){case简单同步:return使用synchronized简单可靠;case需要超时:return使用ReentrantLock.tryLock();case读写分离:return使用ReentrantReadWriteLock;case高并发统计:return考虑使用LongAdder;case分布式环境:return使用分布式锁如Redis锁;default:return使用synchronized;}}}总结synchronizedJava内置的同步机制从最初的重量级锁发展到现在的智能锁升级性能已经得到了极大的优化。在实际项目中需要根据具体场景选择合适的同步策略对于简单的同步需求synchronized是选择对于复杂的并发控制可以考虑ReentrantLock等更灵活的机制。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

房产网站模板网站免费

双馈风力发电机-900V直流混合储能并网系统MATLAB/simulink“双馈风力发电机(DFIG) 900V 直流母线 混合储能(锂电池 超级电容) 并网系统” 的 MATLAB/Simulink 仿真模型及配套代码。 这是一个典型的 可再生能源-储能协同并网系…

张小明 2025/12/22 13:15:45 网站建设

商务网站建设是什么网站注册搜索引擎的目的

FaceFusion能否集成到微信小程序中?技术路径分析在短视频和社交应用早已普及“一键换脸”“明星同款滤镜”的今天,用户对趣味性视觉互动的期待越来越高。而微信小程序作为连接服务与用户的轻量级入口,自然也成为品牌尝试AI玩法的重要阵地。一…

张小明 2025/12/22 11:50:01 网站建设

黑色网站设计一张网页设计图多少钱

Langchain-Chatchat在元宇宙社交中的角色定位 在虚拟世界日益逼近现实体验的今天,元宇宙不再只是“戴上头显看3D场景”的技术展示,而正在演变为一个拥有身份认同、社会规则与情感连接的数字生活空间。用户开始追问:我的虚拟化身该以怎样的方式…

张小明 2025/12/29 3:50:42 网站建设

门源县wap网站建设公司北京网络安全大会

目录 解决:无构建目标或目标与项目不匹配 如何在vscode中添加文件,无须每次到keil中添加? 如何在vscode直接定义 (keil中定义的) 宏 解决vscode中 USART1_IRQn 报红 (仅针对STM32F103C8T6,其他型号可能是STM32Fxxx_MD) Keil 烧录结果需要…

张小明 2025/12/22 15:00:20 网站建设

南京网站优化网站建设公司好的响应式网站

目录 引言 1 python 仿真程序 1.1 实验数据导出效果 1.2 实验记录导出效果 1.3 完整程序 2 matlab/simulink 仿真模型 2.1 simulink 建模 2.2 S-Function 函数文件 2.3 参数文件 2.4 绘图文件 引言 本文分享【自动控制入门2A】从零搭建全连续控制系统:基于抗积分饱和PID的输入…

张小明 2025/12/22 17:31:24 网站建设

做网站项目如何实现支付简单的做海报的网站

2025年6月颠覆性AI论文深度解析:7大技术突破重塑人工智能未来 【免费下载链接】ML-Papers-of-the-Week 每周精选机器学习研究论文。 项目地址: https://gitcode.com/GitHub_Trending/ml/ML-Papers-of-the-Week 想要在AI技术日新月异的浪潮中保持领先&#xf…

张小明 2025/12/22 14:06:46 网站建设