【【【【StampedLockTest1】】】】
package stamped;import java.util.LinkedList;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.StampedLock;
import java.util.stream.Collectors;public class StampedLockTest1 {private static final StampedLock lock = new StampedLock();private static LinkedList<Long> list = new LinkedList();public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(10);Runnable readTask = () -> {while (true) {read();}};Runnable writeTask = ()->{while (true) {write();}};executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(readTask);executor.submit(writeTask);}/*** @description : 读操作采用的【悲观锁】方式*/private static void read() {long stamp = -1;try {stamp = lock.readLock();Optional.of(list.stream().map(String::valueOf).collect(Collectors.joining("####", "RRR - ", ""))).ifPresent(System.out::println);TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlockRead(stamp);}}private static void write() {long stamp = -1;try {stamp = lock.writeLock();list.addLast(System.currentTimeMillis());TimeUnit.SECONDS.sleep(2);System.out.println(Thread.currentThread().getName() + " write finish.");} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlockWrite(stamp);}}
}