java8-StampedLock
来源:互联网 发布:c数据库入门经典 编辑:程序博客网 时间:2024/06/05 00:22
import java.util.concurrent.locks.StampedLock;public class Test { private String str = "init"; private final StampedLock stampedLock = new StampedLock(); public static void main(String[] args) { final Test test = new Test(); new Thread(() -> test.write(Thread.currentThread()),"B").start(); new Thread(() -> test.read(Thread.currentThread()),"A").start(); new Thread(() -> test.read(Thread.currentThread()),"C").start(); new Thread(() -> test.write(Thread.currentThread()),"D").start(); } public void read(Thread thread) { long stamp = stampedLock.tryOptimisticRead(); try { System.out.println("线程" + thread.getName() + "开始读操作..."); System.out.println("线程" + thread.getName() + "读出..." + str); Thread.sleep(5); if (!stampedLock.validate(stamp)) { System.out.println("线程" + thread.getName() + "票据失效,等待重新开始读操作..."); stamp = stampedLock.readLock(); //读锁 System.out.println("线程" + thread.getName() + "重新开始读操作..."); System.out.println("线程" + thread.getName() + "读出..." + str); } System.out.println("线程" + thread.getName() + "读操作完毕..."); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("线程" + thread.getName() + "释放读锁..."); stampedLock.unlockRead(stamp);//释放读锁 } } public void write(Thread thread) { long stamp = stampedLock.writeLock(); //写锁 try { System.out.println("线程" + thread.getName() + "开始写操作..."); for (int i = 1; i < 10; i++) { str = "写入" + i; Thread.sleep(5); } System.out.println("线程" + thread.getName() + "写操作完毕..."); } catch (InterruptedException e) { e.printStackTrace(); } finally { System.out.println("线程" + thread.getName() + "释放写锁..."); stampedLock.unlockWrite(stamp);//释放写锁 } }}
线程B开始写操作...线程A开始读操作...线程A读出...写入1线程C开始读操作...线程C读出...写入1线程A票据失效,等待重新开始读操作...线程C票据失效,等待重新开始读操作...线程B写操作完毕...线程B释放写锁...线程D开始写操作...线程D写操作完毕...线程D释放写锁...线程A重新开始读操作...线程C重新开始读操作...线程C读出...写入9线程A读出...写入9线程C读操作完毕...线程A读操作完毕...线程A释放读锁...线程C释放读锁...
阅读全文
0 0
- java8-StampedLock
- Java8对读写锁的改进:StampedLock
- StampedLock
- java8新特性回顾(五)---并发增强之stampedLock
- Java 8的StampedLock
- StampedLock的使用
- 【Java并发】- StampedLock使用
- StampedLock的简单用法
- 多线程之StampedLock
- Java8
- java8
- Java8
- java8
- java8
- java8
- java8
- Java8
- Java8
- Linux系统的延时及定时任务
- 集合(二)Map操作数据、Map、HashMap
- windows下cmd命令大全
- Unity如何实现在单例中做逐帧触发
- hdu 3696 Farm Game (拓扑排序)
- java8-StampedLock
- js正则表达式限制文本框输入
- 读取联系人
- js 去掉浏览器右击默认事件并绑定右击事件
- singleLine=”true” 和 maxLines=”1″的区别 android:ellipsize="end"无效
- 你们这些小杂碎,天天送给我WA
- VideoClarity<ClearView>视频质量分析系统
- OpenCV学习(4) Mat的基本操作(1)
- 随手敲的前台页面