From d38c074ed0c44785611ae24e221e7647b13deaac Mon Sep 17 00:00:00 2001 From: Sr <39112652+Itswag@users.noreply.github.com> Date: Sun, 13 Feb 2022 17:48:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[docs=20fix]=E5=BC=95=E7=94=A8=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E9=94=99=E5=88=AB=E5=AD=97=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/collection/concurrent-hash-map-source-code.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/collection/concurrent-hash-map-source-code.md b/docs/java/collection/concurrent-hash-map-source-code.md index 51b82404..74e5faac 100644 --- a/docs/java/collection/concurrent-hash-map-source-code.md +++ b/docs/java/collection/concurrent-hash-map-source-code.md @@ -14,7 +14,7 @@ tag: ### 1. 存储结构 -> 下图存在一个笔误 Segmeng -> Segment +> 下图存在两个笔误 : Segmeng -> Segment ; HashEntity -> HashEntry ![Java 7 ConcurrentHashMap 存储结构](./images/image-20200405151029416.png) From 5d5f8e3f5cc04604ccf2af8a9a899bae61eeb1b2 Mon Sep 17 00:00:00 2001 From: Sr <39112652+Itswag@users.noreply.github.com> Date: Sun, 13 Feb 2022 18:01:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[docs=20fix]=E9=94=99=E5=88=AB=E5=AD=97?= =?UTF-8?q?=E4=BF=AE=E6=94=B9&=E4=BC=98=E5=8C=96=E8=A1=A8=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/concurrent/java-concurrent-questions-02.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/java/concurrent/java-concurrent-questions-02.md b/docs/java/concurrent/java-concurrent-questions-02.md index abaa3e0d..3f138403 100644 --- a/docs/java/concurrent/java-concurrent-questions-02.md +++ b/docs/java/concurrent/java-concurrent-questions-02.md @@ -245,7 +245,7 @@ Java 内存模型抽象了线程和主内存之间的关系,就比如说线程 ### 2.3. 并发编程的三个重要特性 -1. **原子性** : 一个的操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。`synchronized` 可以保证代码片段的原子性。 +1. **原子性** : 一次操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么都不执行。`synchronized` 可以保证代码片段的原子性。 2. **可见性** :当一个线程对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。`volatile` 关键字可以保证共享变量的可见性。 3. **有序性** :代码在执行的过程中的先后顺序,Java 在编译器以及运行期间的优化,代码的执行顺序未必就是编写代码时候的顺序。`volatile` 关键字可以禁止指令进行重排序优化。 @@ -391,7 +391,7 @@ ThreadLocalMap(ThreadLocal firstKey, Object firstValue) { } ``` -比如我们在同一个线程中声明了两个 `ThreadLocal` 对象的话,会使用 `Thread`内部都是使用仅有那个`ThreadLocalMap` 存放数据的,`ThreadLocalMap`的 key 就是 `ThreadLocal`对象,value 就是 `ThreadLocal` 对象调用`set`方法设置的值。 +比如我们在同一个线程中声明了两个 `ThreadLocal` 对象的话, `Thread`内部都是使用仅有的那个`ThreadLocalMap` 存放数据的,`ThreadLocalMap`的 key 就是 `ThreadLocal`对象,value 就是 `ThreadLocal` 对象调用`set`方法设置的值。 ![ThreadLocal数据结构](images/threadlocal数据结构.png) @@ -950,7 +950,7 @@ protected final boolean compareAndSetState(int expect, int update) { ```java protected boolean tryAcquire(int)//独占方式。尝试获取资源,成功则返回true,失败则返回false。 protected boolean tryRelease(int)//独占方式。尝试释放资源,成功则返回true,失败则返回false。 -protected boolean tryAcquireShared(int)//共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余资源。 +protected int tryAcquireShared(int)//共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余资源。 protected boolean tryReleaseShared(int)//共享方式。尝试释放资源,成功则返回true,失败则返回false。 protected boolean isHeldExclusively()//该线程是否正在独占资源。只有用到condition才需要去实现它。 ```