dengxinyi hace 6 años
padre
commit
b8b943317d
Se han modificado 2 ficheros con 63 adiciones y 0 borrados
  1. 32 0
      basis/concurrent/TestAtomic.java
  2. 31 0
      basis/concurrent/TestThreadUnsafe.java

+ 32 - 0
basis/concurrent/TestAtomic.java

@@ -0,0 +1,32 @@
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.*;
+
+public class TestAtomic {
+    public static void main(String[] args) throws Exception {
+        int threads = 1000;
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CountDownLatch cd = new CountDownLatch(threads);
+        Counter counter = new Counter();
+        for (int i = 0; i < threads; i++) {
+            executor.execute(() -> {
+                counter.add();
+                cd.countDown();
+            });
+        }
+        cd.await();
+        executor.shutdown();
+        System.out.println(counter.get());
+    }
+}
+
+class Counter {
+    private AtomicInteger count = new AtomicInteger(0);
+
+    void add() {
+        count.incrementAndGet();
+    }
+
+    int get() {
+        return count.get();
+    }
+}

+ 31 - 0
basis/concurrent/TestThreadUnsafe.java

@@ -0,0 +1,31 @@
+import java.util.concurrent.*;
+
+public class TestThreadUnsafe {
+    public static void main(String[] args) throws Exception {
+        int threads = 1000;
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CountDownLatch cd = new CountDownLatch(threads);
+        Counter counter = new Counter();
+        for (int i = 0; i < threads; i++) {
+            executor.execute(() -> {
+                counter.add();
+                cd.countDown();
+            });
+        }
+        cd.await();
+        executor.shutdown();
+        System.out.println(counter.get());
+    }
+}
+
+class Counter {
+    private int count = 0;
+
+    void add() {
+        count++;
+    }
+
+    int get() {
+        return count;
+    }
+}