From e70fd4ae2b3e0f8013e41493f0a6d0b80a2ca2f0 Mon Sep 17 00:00:00 2001
From: "dan.wang1030" <18730601431@163.com>
Date: Fri, 29 Jan 2021 18:25:29 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E6=B5=8B=E8=AF=95join,=20waitAndNotify?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
03concurrency/0301/pom.xml | 5 +-
.../src/main/java/java0/conc0301/op/Join.java | 1 +
.../main/java/java0/conc0301/op/Join2.java | 68 +++++++++++++++++++
.../java/java0/conc0301/op/WaitAndNotify.java | 1 +
.../java0/conc0301/op/WaitAndNotifyTest.java | 68 +++++++++++++++++++
.../java0/conc0302/atomic/AtomicMain.java | 4 +-
.../java/java0/conc0302/atomic/SyncCount.java | 14 +---
.../conc0302/threadpool/ExceptionDemo.java | 20 +++---
.../conc0303/tool/CountDownLatchDemo.java | 2 +-
.../conc0303/tool/CyclicBarrierDemo.java | 4 +-
.../java0/conc0303/tool/SemaphoreDemo.java | 2 +-
11 files changed, 159 insertions(+), 30 deletions(-)
create mode 100644 03concurrency/0301/src/main/java/java0/conc0301/op/Join2.java
create mode 100644 03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotifyTest.java
diff --git a/03concurrency/0301/pom.xml b/03concurrency/0301/pom.xml
index 55691a2d..876e00b2 100644
--- a/03concurrency/0301/pom.xml
+++ b/03concurrency/0301/pom.xml
@@ -12,9 +12,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.8.0
- 8
- 8
+ 1.8
+ 1.8
diff --git a/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java b/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java
index 1cbf6a5a..5c59c3e3 100644
--- a/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java
+++ b/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java
@@ -9,6 +9,7 @@ public static void main(String[] args) {
//oo = thread1;
thread1.setOo(oo);
thread1.start();
+
synchronized (oo) { // 这里用oo或thread1/this
for (int i = 0; i < 100; i++) {
diff --git a/03concurrency/0301/src/main/java/java0/conc0301/op/Join2.java b/03concurrency/0301/src/main/java/java0/conc0301/op/Join2.java
new file mode 100644
index 00000000..3f15a761
--- /dev/null
+++ b/03concurrency/0301/src/main/java/java0/conc0301/op/Join2.java
@@ -0,0 +1,68 @@
+package java0.conc0301.op;
+
+public class Join2 {
+
+ public static void main(String[] args) {
+ Object oo = new Object();
+
+ MyThread2 thread1 = new MyThread2("thread1 -- ");
+ //oo = thread1;
+ thread1.setOo(oo);
+ thread1.start();
+
+ synchronized (oo) { // 这里用oo或thread1/this
+ for (int i = 0; i < 100; i++) {
+ try {
+ if (i % 2 == 1) {
+ System.out.println(Thread.currentThread().getName() + " -- " + i);
+ //thread1.join();
+ } else {
+ oo.wait(1);
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ oo.notifyAll();
+ }
+ }
+
+
+
+
+ }
+
+}
+
+class MyThread2 extends Thread {
+
+ private String name;
+ private Object oo;
+
+ public void setOo(Object oo) {
+ this.oo = oo;
+ }
+
+ public MyThread2(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void run() {
+ try{
+ synchronized (oo) { // 这里用oo或this,效果不同
+ for (int i = 0; i < 100; i++) {
+ if (i%2 == 0){
+ System.out.println(name + i);
+ }else {
+ oo.wait(1);
+ }
+ }
+ }
+ }catch (InterruptedException ex){
+ ex.printStackTrace();
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java b/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java
index e3956c10..96229ee8 100644
--- a/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java
+++ b/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java
@@ -11,6 +11,7 @@ public static void main(String[] args) {
e.printStackTrace();
}
}, "t1");
+ Object obj = new Object();
Thread t2 = new Thread(() -> {
try {
methodClass.customer();
diff --git a/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotifyTest.java b/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotifyTest.java
new file mode 100644
index 00000000..bb489d30
--- /dev/null
+++ b/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotifyTest.java
@@ -0,0 +1,68 @@
+package java0.conc0301.op;
+
+public class WaitAndNotifyTest {
+
+ public static void main(String[] args){
+ WaitAndNotifyProduct andNotifyProduct = new WaitAndNotifyProduct();
+
+ Thread thread1 = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ andNotifyProduct.add();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }, "t1");
+ Thread t2 = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ andNotifyProduct.sub();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }, "t2");
+ thread1.start();
+ t2.start();
+
+
+
+ }
+
+
+ static class WaitAndNotifyProduct{
+
+ int count = 1;
+
+ public synchronized void add() throws InterruptedException {
+ while (true){
+ if (count < 10){
+ count++;
+ System.out.println(Thread.currentThread().getName() + "::::" + count);
+ }else {
+ wait();
+ System.out.println(Thread.currentThread().getName() + "等待仓库空间。。。。");
+ }
+ notifyAll();
+ }
+
+ }
+
+ public synchronized void sub() throws InterruptedException {
+ while (true){
+ if (count > 0){
+ count--;
+ System.out.println(Thread.currentThread().getName() + "::::" + count);
+ }else {
+ wait();
+ System.out.println(Thread.currentThread().getName() + "等待工厂生产商品。。。");
+ }
+ notifyAll();
+ }
+
+ }
+ }
+}
diff --git a/03concurrency/0301/src/main/java/java0/conc0302/atomic/AtomicMain.java b/03concurrency/0301/src/main/java/java0/conc0302/atomic/AtomicMain.java
index 297eb343..de251e57 100644
--- a/03concurrency/0301/src/main/java/java0/conc0302/atomic/AtomicMain.java
+++ b/03concurrency/0301/src/main/java/java0/conc0302/atomic/AtomicMain.java
@@ -4,7 +4,7 @@
public class AtomicMain {
public static void main(String[] args) {
- final SyncCount count = new SyncCount();
+ final AtomicCount count = new AtomicCount();
for (int i = 0; i < 100; i++) {
new Thread(new Runnable() {
@Override
@@ -17,7 +17,7 @@ public void run() {
}
try {
- Thread.sleep(5000L);
+ Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
diff --git a/03concurrency/0301/src/main/java/java0/conc0302/atomic/SyncCount.java b/03concurrency/0301/src/main/java/java0/conc0302/atomic/SyncCount.java
index b95c7cff..5a32183e 100644
--- a/03concurrency/0301/src/main/java/java0/conc0302/atomic/SyncCount.java
+++ b/03concurrency/0301/src/main/java/java0/conc0302/atomic/SyncCount.java
@@ -1,22 +1,12 @@
package java0.conc0302.atomic;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
public class SyncCount {
private int num = 0;
- private Lock lock = new ReentrantLock(true);
-
- public int add() {
- try {
- lock.lock();
- return num++;
- } finally {
- lock.unlock();
- }
+ public synchronized int add() {
+ return num++;
}
public int getNum() {
diff --git a/03concurrency/0301/src/main/java/java0/conc0302/threadpool/ExceptionDemo.java b/03concurrency/0301/src/main/java/java0/conc0302/threadpool/ExceptionDemo.java
index 22240c51..c9174072 100644
--- a/03concurrency/0301/src/main/java/java0/conc0302/threadpool/ExceptionDemo.java
+++ b/03concurrency/0301/src/main/java/java0/conc0302/threadpool/ExceptionDemo.java
@@ -21,16 +21,16 @@ public static void main(String[] args) {
System.out.println("catch submit");
ex.printStackTrace();
}
-//
-// try {
-// executorService.execute(() -> {
-// throw new RuntimeException("executorService.execute()");
-// });
-// } catch (Exception ex) {
-// System.out.println("catch execute");
-// ex.printStackTrace();
-// }
-//
+
+ try {
+ executorService.execute(() -> {
+ throw new RuntimeException("executorService.execute()");
+ });
+ } catch (Exception ex) {
+ System.out.println("catch execute");
+ ex.printStackTrace();
+ }
+
executorService.shutdown();
System.out.println("Main Thread End!");
}
diff --git a/03concurrency/0301/src/main/java/java0/conc0303/tool/CountDownLatchDemo.java b/03concurrency/0301/src/main/java/java0/conc0303/tool/CountDownLatchDemo.java
index b93731be..66cd7406 100644
--- a/03concurrency/0301/src/main/java/java0/conc0303/tool/CountDownLatchDemo.java
+++ b/03concurrency/0301/src/main/java/java0/conc0303/tool/CountDownLatchDemo.java
@@ -5,7 +5,7 @@
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(5);
- for(int i=0;i<5;i++){
+ for(int i=0;i<10;i++){
new Thread(new readNum(i,countDownLatch)).start();
}
countDownLatch.await(); // 注意跟CyclicBarrier不同,这里在主线程await
diff --git a/03concurrency/0301/src/main/java/java0/conc0303/tool/CyclicBarrierDemo.java b/03concurrency/0301/src/main/java/java0/conc0303/tool/CyclicBarrierDemo.java
index 628d980d..fd7b8aa6 100644
--- a/03concurrency/0301/src/main/java/java0/conc0303/tool/CyclicBarrierDemo.java
+++ b/03concurrency/0301/src/main/java/java0/conc0303/tool/CyclicBarrierDemo.java
@@ -39,9 +39,9 @@ public void run() {
synchronized (this){
System.out.println("id:"+id+","+Thread.currentThread().getName());
try {
- cyc.await();
+ //cyc.await();
System.out.println("线程组任务" + id + "结束,其他任务继续");
- //cyc.await(); // 注意跟CountDownLatch不同,这里在子线程await
+ cyc.await(); // 注意跟CountDownLatch不同,这里在子线程await
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/03concurrency/0301/src/main/java/java0/conc0303/tool/SemaphoreDemo.java b/03concurrency/0301/src/main/java/java0/conc0303/tool/SemaphoreDemo.java
index d9642c04..542ae10b 100644
--- a/03concurrency/0301/src/main/java/java0/conc0303/tool/SemaphoreDemo.java
+++ b/03concurrency/0301/src/main/java/java0/conc0303/tool/SemaphoreDemo.java
@@ -6,7 +6,7 @@ public class SemaphoreDemo {
public static void main(String[] args) {
int N = 8; //工人数
- Semaphore semaphore = new Semaphore(2); //机器数目
+ Semaphore semaphore = new Semaphore(1); //机器数目
for (int i = 0; i < N; i++)
new Worker(i, semaphore).start();
}
From 86612ef48705b99d12534cbba2b8932f40058299 Mon Sep 17 00:00:00 2001
From: wangdan1
Date: Fri, 29 Jan 2021 22:10:55 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=88=B0thread.interrupt?=
=?UTF-8?q?=E5=87=BA=E7=8E=B0=E9=97=AE=E9=A2=98=EF=BC=8C=E9=9C=80=E8=A6=81?=
=?UTF-8?q?=E4=BB=94=E7=BB=86=E7=9C=8B=E4=B8=80=E4=B8=8BThread.interrupt?=
=?UTF-8?q?=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/java0/conc0301/DaemonThread.java | 17 +++++++++--------
.../main/java/java0/conc0301/RunnerMain.java | 1 +
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java b/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java
index 5fec537e..0dac8be3 100644
--- a/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java
+++ b/03concurrency/0301/src/main/java/java0/conc0301/DaemonThread.java
@@ -1,24 +1,25 @@
package java0.conc0301;
public class DaemonThread {
-
+
public static void main(String[] args) throws InterruptedException {
Runnable task = () -> {
- try {
- Thread.sleep(1000);
+ try {
+ System.out.println("当前线程:" + Thread.currentThread().getName());
+ Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
- Thread t = Thread.currentThread();
- System.out.println("当前线程:" + t.getName());
+ Thread t = Thread.currentThread();
+ System.out.println("当前线程:" + t.getName());
};
Thread thread = new Thread(task);
thread.setName("test-thread-1");
thread.setDaemon(true);
thread.start();
- //Thread.sleep(2000);
+ Thread.sleep(2000);
}
-
-
+
+
}
diff --git a/03concurrency/0301/src/main/java/java0/conc0301/RunnerMain.java b/03concurrency/0301/src/main/java/java0/conc0301/RunnerMain.java
index 626f2d38..15a6f709 100644
--- a/03concurrency/0301/src/main/java/java0/conc0301/RunnerMain.java
+++ b/03concurrency/0301/src/main/java/java0/conc0301/RunnerMain.java
@@ -16,6 +16,7 @@ public static void main(String[] args) throws IOException {
thread1.start();
thread2.start();
+ //TODO
thread2.interrupt(); // i = true
System.out.println(Thread.activeCount());