import java
.util.concurrent.ExecutorService
import java
.util.concurrent.Executors
import java
.util.concurrent.locks.StampedLock
public class Lock5 {
public static void main(String[] args) {
ExecutorService executor = Executors
.newFixedThreadPool(
2)
StampedLock lock = new StampedLock()
executor
.submit(() -> {
long stamp = lock
.tryOptimisticRead()
try {
System
.out.println(
"Optimistic Lock Valid: " + lock
.validate(stamp))
ConcurrentUtils
.sleep(
1)
System
.out.println(
"Optimistic Lock Valid: " + lock
.validate(stamp))
ConcurrentUtils
.sleep(
2)
System
.out.println(
"Optimistic Lock Valid: " + lock
.validate(stamp))
} finally {
lock
.unlock(stamp)
}
})
executor
.submit(() -> {
long stamp = lock
.writeLock()
try {
System
.out.println(
"Write Lock acquired")
ConcurrentUtils
.sleep(
2)
} finally {
lock
.unlock(stamp)
System
.out.println(
"Write done")
}
})
ConcurrentUtils
.stop(executor)
}
}
转载于:https://www.cnblogs.com/bilaisheng/p/10210920.html