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());
+ }
}