import tech.powerjob.common.utils.SegmentLock;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
|
/**
|
* 分段锁测试
|
*
|
* @author tjq
|
* @since 2020/6/15
|
*/
|
public class SegmentLockTest {
|
|
@Test
|
public void testLock() throws Exception {
|
int lockId = 10086;
|
SegmentLock lock = new SegmentLock(4);
|
ExecutorService pool = Executors.newFixedThreadPool(2);
|
pool.execute(() -> {
|
System.out.println("before lock A");
|
lock.lockInterruptibleSafe(lockId);
|
System.out.println("after lock A");
|
});
|
|
pool.execute(() -> {
|
System.out.println("before lock AA");
|
lock.lockInterruptibleSafe(lockId);
|
System.out.println("after lock AA");
|
});
|
|
Thread.sleep(10000);
|
}
|
|
@Test
|
public void testUnLock() throws Exception {
|
int lockId = 10086;
|
SegmentLock lock = new SegmentLock(4);
|
ExecutorService pool = Executors.newFixedThreadPool(2);
|
pool.execute(() -> {
|
System.out.println("before lock A");
|
lock.lockInterruptibleSafe(lockId);
|
System.out.println("after lock A");
|
try {
|
Thread.sleep(5000);
|
}catch (Exception ignore) {
|
}
|
lock.unlock(lockId);
|
});
|
|
pool.execute(() -> {
|
System.out.println("before lock AA");
|
lock.lockInterruptibleSafe(lockId);
|
System.out.println("after lock AA");
|
});
|
|
Thread.sleep(10000);
|
}
|
|
}
|