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

福州网站搜索引擎优化徐州百度推广总代理

福州网站搜索引擎优化,徐州百度推广总代理,crm在线观看,bim网站Java 锁机制详解:用“厕所门”和“防盗门”轻松理解多线程同步 目录 锁的作用synchronized 关键字ReentrantLockReadWriteLockStampedLock避免死锁的诀窍总结与对比 锁的作用 生活中的例子:公共厕所一次只能进一人,门上的“有人/无人”标志…

Java 锁机制详解:用“厕所门”和“防盗门”轻松理解多线程同步

目录

  • 锁的作用
  • synchronized 关键字
  • ReentrantLock
  • ReadWriteLock
  • StampedLock
  • 避免死锁的诀窍
  • 总结与对比

锁的作用

生活中的例子:公共厕所一次只能进一人,门上的“有人/无人”标志就是锁。
程序中的作用:当多个线程操作共享资源(如银行账户余额)时,锁保证数据安全。


synchronized 关键字

1. 同步方法

class BankAccount {private int balance = 100;// 锁住整个对象public synchronized void withdraw(int amount) {if (balance >= amount) {System.out.println(Thread.currentThread().getName() + " 取款 " + amount);balance -= amount;}}
}

类比:厕所门自动上锁,其他人必须等待。

2. 同步代码块

public void withdraw(int amount) {// 只锁关键代码synchronized(this) { if (balance >= amount) {balance -= amount;}}
}

优势:缩小锁范围,提高效率。


ReentrantLock

import java.util.concurrent.locks.ReentrantLock;class TicketSeller {private int tickets = 10;private ReentrantLock lock = new ReentrantLock();public void sellTicket() {lock.lock(); // 手动加锁try {if (tickets > 0) {System.out.println(Thread.currentThread().getName() + " 卖出第 " + tickets--);}} finally {lock.unlock(); // 必须手动释放!}}
}

特点

  • 支持公平锁(new ReentrantLock(true)
  • 可尝试获取锁(tryLock()
  • 可中断等待(lockInterruptibly()

类比:手动开关的防盗门,灵活控制进出规则。


ReadWriteLock

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;class Cache {private Object data = null;private ReadWriteLock rwLock = new ReentrantReadWriteLock();// 读操作:共享锁public Object getData() {rwLock.readLock().lock();try {return data;} finally {rwLock.readLock().unlock();}}// 写操作:独占锁public void updateData(Object newData) {rwLock.writeLock().lock();try {data = newData;} finally {rwLock.writeLock().unlock();}}
}

适用场景:读多写少(如商品库存查询)。


StampedLock

import java.util.concurrent.locks.StampedLock;class Point {private double x, y;private StampedLock lock = new StampedLock();// 乐观读:假设写操作很少发生public double distanceFromOrigin() {long stamp = lock.tryOptimisticRead();double currentX = x, currentY = y;if (!lock.validate(stamp)) { // 检查是否有写操作stamp = lock.readLock(); // 转为悲观读锁try {currentX = x;currentY = y;} finally {lock.unlockRead(stamp);}}return Math.sqrt(currentX * currentX + currentY * currentY);}
}

特点:在读多写少时性能更高,但实现复杂。


避免死锁的诀窍

经典死锁场景:两人在独木桥相遇,互不相让。
解决方案

  1. 固定顺序获取锁:比如先锁 A 再锁 B。
  2. 设置超时时间tryLock(5, TimeUnit.SECONDS)

总结与对比

锁类型特点适用场景
synchronized自动加锁/释放,简单但性能较低简单同步需求
ReentrantLock手动控制,支持公平锁/条件变量复杂同步场景
ReadWriteLock读写分离,提升读性能读多写少(如缓存)
StampedLock乐观读,性能最高但实现复杂极高并发读,极少写

提示:实际开发中优先选择 synchronized,需要高级功能时再考虑其他锁。

http://www.dtcms.com/wzjs/448048.html

相关文章:

  • WordPress漫画网南京seo网络推广
  • 磁力网站怎么做的怎么建个人网站
  • 上海做网站公司做网站的公司以品牌推广为目的的广告网络平台
  • 做美图 网站有哪些东西吗seo推广岗位职责
  • 网站站内结构优化百度关键词点击价格查询
  • 大芬地铁站附近做网站指数基金有哪些
  • 茂名营销网站开发天津百度优化
  • 淘宝客怎么做直播网站吗互联网哪个行业前景好
  • 网站运营目标网页设计素材网站
  • 嘉祥县建设局官方网站十大洗脑广告
  • 北京网站建设定制型报价网上营销策略有哪些
  • 女人和男人做爰有毒网站贴吧引流推广
  • 湛江网站开发个人开发app去哪里接广告
  • 传奇私服网站搭建教程新网seo关键词优化教程
  • 做网站的流程方法友情链接怎么做
  • 怎么做网站dns加速免费云服务器
  • 汕头网站制作微信怎么推广自己的产品
  • phpcms做视频网站首页百度手机助手网页
  • wordpress免签约支付seo价格是多少
  • 做erp系统的网站长春网站seo哪家好
  • 女生做网站运营整合营销传播的六种方法
  • 做网站开发前景如何天津百度推广公司
  • 一级a做爰片免费网站录像网络营销推广价格
  • 公司网站做的一样算不算侵权百度上免费创建网站
  • 伴奏网站防盗是怎么做的湖南株洲疫情最新情况
  • 网站建设服务标准化爱站网官网查询域名
  • HTMT超链接网站怎么做搜索引擎名词解释
  • win主机 wordpress柏乡seo快排优化
  • 二手书网站开发需求分析湖南seo
  • 温州网站建设这个爱站网seo