You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2018/03/04 04:46:24 UTC

groovy git commit: Add a test for accessing cache concurrently

Repository: groovy
Updated Branches:
  refs/heads/master 8a85833ff -> 4d3d0ed0f


Add a test for accessing cache concurrently


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/4d3d0ed0
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/4d3d0ed0
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/4d3d0ed0

Branch: refs/heads/master
Commit: 4d3d0ed0f3b6db725a47d6aac6270d60cdc4446a
Parents: 8a85833
Author: danielsun1106 <re...@hotmail.com>
Authored: Sun Mar 4 12:46:13 2018 +0800
Committer: danielsun1106 <re...@hotmail.com>
Committed: Sun Mar 4 12:46:13 2018 +0800

----------------------------------------------------------------------
 .../memoize/ConcurrentCommonCacheTest.java      | 32 ++++++++++++++++++++
 1 file changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/4d3d0ed0/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java b/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
index 44c9ae2..a8d57f5 100644
--- a/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
+++ b/src/test/org/codehaus/groovy/runtime/memoize/ConcurrentCommonCacheTest.java
@@ -24,6 +24,8 @@ import org.junit.Test;
 
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class ConcurrentCommonCacheTest {
     @Test
@@ -200,4 +202,34 @@ public class ConcurrentCommonCacheTest {
         Assert.assertEquals("3", sc.get("c"));
         Assert.assertEquals("5", sc.get("d"));
     }
+
+    @Test
+    public void testAccessCacheConcurrently() throws InterruptedException {
+        final ConcurrentCommonCache<Integer, Integer> m = new ConcurrentCommonCache<>();
+
+        final int threadNum = 30;
+        final CountDownLatch countDownLatch = new CountDownLatch(1);
+        final CountDownLatch countDownLatch2 = new CountDownLatch(threadNum);
+
+        final AtomicInteger cnt = new AtomicInteger(0);
+
+        for (int i = 0; i < threadNum; i++) {
+            new Thread(() -> {
+                try {
+                    countDownLatch.await();
+
+                    m.getAndPut(123, k -> cnt.getAndIncrement());
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                } finally {
+                    countDownLatch2.countDown();
+                }
+            }).start();
+        }
+
+        countDownLatch.countDown();
+        countDownLatch2.await();
+
+        Assert.assertEquals(1, cnt.get());
+    }
 }