From a78db36079752030f7a3df8bec2d72906c135d6e Mon Sep 17 00:00:00 2001 From: 01Petard <1520394133@qq.com> Date: Thu, 7 Nov 2024 15:29:35 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E4=BF=AE=E6=94=B9=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=A4=96=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.js | 1 + ...a Guide - Java\345\237\272\347\241\200.md" | 28 +++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js index 1878275..cc4322e 100644 --- a/docs/.vitepress/config.js +++ b/docs/.vitepress/config.js @@ -67,6 +67,7 @@ export default { {text: 'SSO单点登录的实现原理', link: '/开发/SSO单点登录的实现原理'}, {text: '批量导出zip压缩包和Excel表格', link: '/开发/批量导出zip压缩包和Excel表格'}, {text: '阿里云OSS && 内容安全 Java实现参考代码', link: '/开发/阿里云OSS && 内容安全 Java实现参考代码'}, + {text: '抖音评论区设计', link: '/开发/抖音评论区设计'}, { text: 'My Java Guide', collapsed: false, diff --git "a/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - Java\345\237\272\347\241\200.md" "b/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - Java\345\237\272\347\241\200.md" index 6527fad..71a3846 100644 --- "a/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - Java\345\237\272\347\241\200.md" +++ "b/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - Java\345\237\272\347\241\200.md" @@ -1868,24 +1868,24 @@ ReentrantLock相对于synchronized它具备以下特点: ## synchronized 与 Lock 有什么区别 ? -| 特点 | synchronized | Lock | -| :----------: | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 特点 | synchronized | Lock | +| :----------: | :----------------------------------------------------------: | :----------------------------------------------------------: | | **语法层面** | 关键字,源码在 JVM 中,用 C++ 实现
使用时,退出同步代码块锁会自动释放 | 接口,源码由 JDK 提供,用 Java 语言实现
使用时,需要手动调用 `unlock` 方法释放锁 | -| **功能层面** | 悲观锁,具备互斥、同步、锁重入功能 | 悲观锁,具备互斥、同步、锁重入功能
提供了更多功能,如获取等待状态、公平锁、可打断、可超时、多条件`Condition`变量
有适合不同场景的实现,如 `ReentrantLock`,`ReentrantReadWriteLock` | -| **性能层面** | 在没有竞争时,做了很多优化,如偏向锁、轻量级锁 | 在竞争激烈时,通常会提供更好的性能 | +| **功能层面** | 悲观锁,具备互斥、同步、锁重入功能 | 悲观锁,具备互斥、同步、锁重入功能
提供了更多功能,如获取等待状态、公平锁、可打断、可超时、多条件`Condition`变量
有适合不同场景的实现,如 `ReentrantLock`,`ReentrantReadWriteLock` | +| **性能层面** | 在没有竞争时,做了很多优化,如偏向锁、轻量级锁 | 在竞争激烈时,通常会提供更好的性能 | ## synchronized 与 ReentrantLock 有什么区别 ? -| 特性 | synchronized | ReentrantLock | -| ------------------------ | -------------------------------- | ------------------------------------------- | -| **类别** | Java关键字 | Java中的一个类 | -| **锁类型** | JVM层面的锁 | Java API层面的锁 | -| **加锁/解锁方式** | 自动加锁与释放锁 | 需要手动加锁与释放锁 | -| **获取当前线程是否上锁** | 不可获取 | 可获取 (`isHeldByCurrentThread()`) | -| **公平性** | 默认非公平锁 | 公平锁或非公平锁 | -| **中断支持** | 不可中断 | 可中断 (`tryLock()`, `lockInterruptibly()`) | -| **锁的对象** | 锁的是对象,锁信息保存在对象头中 | int类型的state标识来标识锁的状态 | -| **锁升级** | 底层有锁升级过程 | 没有锁升级过程 | +| 特性 | synchronized | ReentrantLock | +| :----------------------: | :------------------------------: | :-----------------------------------------: | +| **类别** | Java关键字 | Java中的一个类 | +| **锁类型** | JVM层面的锁 | Java API层面的锁 | +| **加锁/解锁方式** | 自动加锁与释放锁 | 需要手动加锁与释放锁 | +| **获取当前线程是否上锁** | 不可获取 | 可获取 (`isHeldByCurrentThread()`) | +| **公平性** | 默认非公平锁 | 公平锁或非公平锁 | +| **中断支持** | 不可中断 | 可中断 (`tryLock()`, `lockInterruptibly()`) | +| **锁的对象** | 锁的是对象,锁信息保存在对象头中 | int类型的state标识来标识锁的状态 | +| **锁升级** | 底层有锁升级过程 | 没有锁升级过程 | img