From d1f7b87e0c2e8f38fa03667e74a7dec4d389f441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E7=BF=94=E7=9A=84=E4=BA=94=E8=8A=B1=E8=82=89?= <492300924@.com> Date: Sat, 18 Nov 2023 19:55:14 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=8E=A8=E9=80=812?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 001-4/src/join/JoinTest2.java | 1 + 1 file changed, 1 insertion(+) diff --git a/001-4/src/join/JoinTest2.java b/001-4/src/join/JoinTest2.java index ce1db78..0e6a84e 100644 --- a/001-4/src/join/JoinTest2.java +++ b/001-4/src/join/JoinTest2.java @@ -27,6 +27,7 @@ public class JoinTest2 { thread.join(3000); } catch (InterruptedException e) { e.printStackTrace(); + } } System.out.println("main" + i); -- Gitee From c9a39ac6203c04f34b3dbc16b2c85208168bdc39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E7=BF=94=E7=9A=84=E4=BA=94=E8=8A=B1=E8=82=89?= <492300924@.com> Date: Sun, 19 Nov 2023 07:24:57 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=8E=A8=E9=80=812?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 001-4/src/yield/YieldTheread1.java | 2 +- 001-4/src/yield/YieldTheread2.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/001-4/src/yield/YieldTheread1.java b/001-4/src/yield/YieldTheread1.java index 43a2968..97ad09f 100644 --- a/001-4/src/yield/YieldTheread1.java +++ b/001-4/src/yield/YieldTheread1.java @@ -11,7 +11,7 @@ package yield; public class YieldTheread1 extends Thread { @Override public void run() { - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 100; i++) { if (i == 5) { yield(); } diff --git a/001-4/src/yield/YieldTheread2.java b/001-4/src/yield/YieldTheread2.java index 4cf108f..dc829cc 100644 --- a/001-4/src/yield/YieldTheread2.java +++ b/001-4/src/yield/YieldTheread2.java @@ -11,7 +11,7 @@ package yield; public class YieldTheread2 extends Thread { @Override public void run() { - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 100; i++) { // Thread.currentThread().getName()获取线程名字 System.out.println(Thread.currentThread().getName() + "-------" + i); } -- Gitee From 067efc9951269be18e1f7419a1bc73e465c16a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E7=BF=94=E7=9A=84=E4=BA=94=E8=8A=B1=E8=82=89?= <492300924@.com> Date: Sun, 19 Nov 2023 07:38:32 +0800 Subject: [PATCH 3/5] test --- 001-4/src/interrupt/Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/001-4/src/interrupt/Test.java b/001-4/src/interrupt/Test.java index a257a3f..734d1a2 100644 --- a/001-4/src/interrupt/Test.java +++ b/001-4/src/interrupt/Test.java @@ -11,7 +11,7 @@ package interrupt; public class Test { public static void main(String[] args) { Thread thread=new Thread("线程1"); - System.out.println(thread.getState()+"====="); //NEW + System.out.println(thread.gettate()+"====="); //NEW thread.interrupt(); System.out.println(thread.isInterrupted());// false } -- Gitee From d2955ade1fd61b824108f9d918973ea0c21e0f09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E7=BF=94=E7=9A=84=E4=BA=94=E8=8A=B1=E8=82=89?= <492300924@.com> Date: Sun, 19 Nov 2023 08:40:41 +0800 Subject: [PATCH 4/5] =?UTF-8?q?ynchronized=E7=BA=BF=E7=A8=8B=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 001-5/src/account/Account.java | 5 +++-- 001-5/src/synchronizeds/Account.java | 2 +- 001-5/src/synchronizeds/SynchronizedTset.java | 12 +++++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/001-5/src/account/Account.java b/001-5/src/account/Account.java index 8ce6cb5..d6d97c1 100644 --- a/001-5/src/account/Account.java +++ b/001-5/src/account/Account.java @@ -17,7 +17,7 @@ package account; * 3.2 寄存器里的数 +1 * 3.3 寄存器写回内存 * 两个线程同时走了第一步i++ - * 张三线程把1放入自己的寄存器;李四线程也把0放入自己的寄存器 + * 张三线程把0放入自己的寄存器;李四线程也把0放入自己的寄存器 * 别在自己的寄存器里+1得到了1 * 最后2个线程都把自己的结果2写回内存 * 所以输出都是1 @@ -30,13 +30,14 @@ public class Account implements Runnable { @Override public void run() { //1. num++操作 - num++; + //num++; //2. 休眠1毫秒 try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } + num++; //3. 输出 System.out.println(Thread.currentThread().getName() + "是当前的" + num + "访客"); } diff --git a/001-5/src/synchronizeds/Account.java b/001-5/src/synchronizeds/Account.java index 98ba6bc..d720050 100644 --- a/001-5/src/synchronizeds/Account.java +++ b/001-5/src/synchronizeds/Account.java @@ -24,7 +24,7 @@ public class Account implements Runnable { num++; //2. 休眠1毫秒 try { - Thread.sleep(1); + Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/001-5/src/synchronizeds/SynchronizedTset.java b/001-5/src/synchronizeds/SynchronizedTset.java index 0caf93e..8b519c7 100644 --- a/001-5/src/synchronizeds/SynchronizedTset.java +++ b/001-5/src/synchronizeds/SynchronizedTset.java @@ -20,7 +20,17 @@ public class SynchronizedTset { thread.start(); } } - + /** + * 没有synchronized关键子修饰 + * 现输出5个 先输出start... + * 后续输出 5个end... + * 分析:1. 首先我们第一个线程进来直击输出; + * 2. 后续直接休眠;让出CUP资源 + * 3. 后续的进程那个抢到CPU那个进来输出start... + * 4. 也直接休眠;由于时间很快,所以我么直接就是一下看出直接输出了5个 + * 5. 后续休眠时间到了的阻塞状态变为就绪状态抢到CPU资源,直接输出end... + * 6. 时间很短给人就是直接输出了5个end... + */ /** * 先输出start... * 间隔1秒 -- Gitee From f94ddf2e5741239b5f40a0e5696b37c078d73310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E7=BF=94=E7=9A=84=E4=BA=94=E8=8A=B1=E8=82=89?= <492300924@.com> Date: Sun, 19 Nov 2023 09:14:40 +0800 Subject: [PATCH 5/5] test --- 001-5/src/synchronizeds/Test.java | 1 + ...277\347\250\213\345\220\214\346\255\245.md" | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/001-5/src/synchronizeds/Test.java b/001-5/src/synchronizeds/Test.java index 9d7e999..e3ba05f 100644 --- a/001-5/src/synchronizeds/Test.java +++ b/001-5/src/synchronizeds/Test.java @@ -13,6 +13,7 @@ public class Test { // 记住对象应该循环外面,这样才会是共享一个对象 Account account = new Account(); for (int i = 0; i < 10; i++) { + Thread thread = new Thread(account); thread.setName("test" + i); thread.start(); diff --git "a/001-5/src/\347\272\277\347\250\213\345\220\214\346\255\245.md" "b/001-5/src/\347\272\277\347\250\213\345\220\214\346\255\245.md" index bcf5916..bdc207a 100644 --- "a/001-5/src/\347\272\277\347\250\213\345\220\214\346\255\245.md" +++ "b/001-5/src/\347\272\277\347\250\213\345\220\214\346\255\245.md" @@ -52,9 +52,9 @@ * 3.2 寄存器里的数 +1 * 3.3 寄存器写回内存 * 两个线程同时走了第一步i++ - * 张三线程把1放入自己的寄存器;李四线程也把0放入自己的寄存器 - * 别在自己的寄存器里+1得到了1 - * 最后2个线程都把自己的结果2写回内存 + * 张三线程把0放入自己的寄存器;李四线程也把0放入自己的寄存器 + * 分别在自己的寄存器里+1得到了1 + * 最后2个线程都把自己的结果1写回内存 * 所以输出都是1 * @version: */ @@ -178,7 +178,17 @@ thread.start(); } } - + /** + * 没有synchronized关键子修饰 + * 现输出5个 先输出start... + * 后续输出 5个end... + * 分析:1. 首先我们第一个线程进来直击输出; + * 2. 后续直接休眠;让出CUP资源 + * 3. 后续的进程那个抢到CPU那个进来输出start... + * 4. 也直接休眠;由于时间很快,所以我么直接就是一下看出直接输出了5个 + * 5. 后续休眠时间到了的阻塞状态变为就绪状态抢到CPU资源,直接输出end... + * 6. 时间很短给人就是直接输出了5个end... + */ /** * 先输出start... * 间隔1秒 -- Gitee