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