From 4c4d486a1edfbc7cffd346bed77d1961b6cb2f7e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=93=92=E5=93=92=E5=93=92?=
<5378361+ddd_lh@user.noreply.gitee.com>
Date: Wed, 11 May 2022 03:38:20 +0000
Subject: [PATCH] =?UTF-8?q?update=20java=E5=B9=B6=E5=8F=91=E7=BC=96?=
=?UTF-8?q?=E7=A8=8B/java=E5=B9=B6=E5=8F=911.md.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java\345\271\266\345\217\2211.md" | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git "a/java\345\271\266\345\217\221\347\274\226\347\250\213/java\345\271\266\345\217\2211.md" "b/java\345\271\266\345\217\221\347\274\226\347\250\213/java\345\271\266\345\217\2211.md"
index 3826aa8..56a4ba4 100644
--- "a/java\345\271\266\345\217\221\347\274\226\347\250\213/java\345\271\266\345\217\2211.md"
+++ "b/java\345\271\266\345\217\221\347\274\226\347\250\213/java\345\271\266\345\217\2211.md"
@@ -592,6 +592,24 @@ public static void main(String[] args) throws InterruptedException {
```
+
+### 思考
+
+synchronized实际是 用对象锁保证了临界区中代码的原子性,临界区内的代对码对外是不可分割的,不会被线程切换所打断。
+
+为了加深理解思考下面的问题:
+
+- 如果吧synchronized(obj)放在for循环外面如何理解?
+
+ 放在外面相当于给整个循环加上了锁那么就是保护了循环次数*++/--的指令这期间不会被其他线程干扰
+
+- 如果t1 synchronized(obj1)但她synchronized(obj2)会怎么样?
+
+ 不可以,t1,t2如果锁的不是一个对象,那么当发生上下文切换的时候,别的线程不会被阻塞
+
+- 如果t1synchronized(obj)t2没有会怎么样?如何理解
+
+ t2不加锁的话他可以直接拿到共享变量,不会被阻塞住
#### synchronized原理
synchronized实际上利用对象保证了临界区代码的原子性,临界区内的代码在外界看来是不可分割的,不会被线程切换所打断
--
Gitee