diff --git a/001-4/src/interrupt/Test.java b/001-4/src/interrupt/Test.java index a257a3ffef919bfc1914b0427f0a4a1bf5e54733..734d1a277fae9f593acebd07602e8da9ea4ddece 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 } diff --git a/001-4/src/join/JoinTest2.java b/001-4/src/join/JoinTest2.java index ce1db78267291a929b973145641a3eb2695227c5..0e6a84ef5f8d12e8023422ffbae8286c85f84bf2 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); diff --git a/001-4/src/yield/YieldTheread1.java b/001-4/src/yield/YieldTheread1.java index 43a29687984a66b390d1a3d1cc841cc86b1b13d3..97ad09f6149ebe0d6c6a454bfbbd92e344fb2a8c 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 4cf108f4771feb182ea62b2b5e776924c761b270..dc829cc8f807c8853f1ec61a7b0e70ff9ba32840 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); } diff --git a/001-5/src/account/Account.java b/001-5/src/account/Account.java index 8ce6cb5afc4efbefda6e322c9dce22af6f49b0d2..d6d97c1b73892af12325db61d960290df1889617 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 98ba6bc85581b935849b52d6e553ec1e7f3effcb..d720050ca2f07b839141b3aabd623143d433a1a8 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 0caf93e4a50dc1c9a874125c8994a23ebe48d420..8b519c73f2c41f9cc76b359cc26df14cadeff653 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秒 diff --git a/001-5/src/synchronizeds/Test.java b/001-5/src/synchronizeds/Test.java index 9d7e99914e50bf3335d4ddbd5b27ae9260c1b62c..e3ba05f0f1d0f332f2e2ab1e34a9aa98b6cb9c5d 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 bcf59162982d29019b49e9477ea0cdea5af40060..bdc207a8a90c1fac0fb11243823f5d41a097841b 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秒