1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.util;
20
21 import org.apache.hadoop.hbase.testclassification.SmallTests;
22 import org.junit.Assert;
23 import org.junit.Test;
24 import org.junit.experimental.categories.Category;
25
26 import java.util.concurrent.locks.ReentrantLock;
27
28 @Category(SmallTests.class)
29 public class TestKeyLocker {
30 @Test
31 public void testLocker(){
32 KeyLocker<String> locker = new KeyLocker<String>();
33 ReentrantLock lock1 = locker.acquireLock("l1");
34 Assert.assertTrue(lock1.isHeldByCurrentThread());
35
36 ReentrantLock lock2 = locker.acquireLock("l2");
37 Assert.assertTrue(lock2.isHeldByCurrentThread());
38 Assert.assertTrue(lock1 != lock2);
39
40
41 ReentrantLock lock20 = locker.acquireLock("l2");
42 Assert.assertTrue(lock20 == lock2);
43 Assert.assertTrue(lock2.isHeldByCurrentThread());
44 Assert.assertTrue(lock20.isHeldByCurrentThread());
45
46
47 lock20.unlock();
48 Assert.assertTrue(lock20.isHeldByCurrentThread());
49
50 lock2.unlock();
51 Assert.assertFalse(lock20.isHeldByCurrentThread());
52
53
54
55
56 int lock2Hash = System.identityHashCode(lock2);
57 lock2 = null;
58 lock20 = null;
59
60 System.gc();
61 System.gc();
62 System.gc();
63
64 ReentrantLock lock200 = locker.acquireLock("l2");
65 Assert.assertNotEquals(lock2Hash, System.identityHashCode(lock200));
66 lock200.unlock();
67 Assert.assertFalse(lock200.isHeldByCurrentThread());
68
69
70 Assert.assertTrue(lock1.isHeldByCurrentThread());
71 lock1.unlock();
72 Assert.assertFalse(lock1.isHeldByCurrentThread());
73 }
74 }