博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReentrantReadWriteLock——写写互斥(二)
阅读量:5243 次
发布时间:2019-06-14

本文共 1718 字,大约阅读时间需要 5 分钟。

 "读写" 、"写读"、"写写"都是同步的、互斥的 

 

1、Service.java

package ReentrantReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class Service {    private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();        //写写互斥    public void write(){                try{            try{                lock.writeLock().lock();//写锁                System.out.println("获得写锁"+Thread.currentThread().getName()+" "+System.currentTimeMillis());                Thread.sleep(10000);            }finally{                lock.writeLock().unlock();//解锁            }                    }catch(Exception e){            e.printStackTrace();        }            }        }

可以发现,lock.writeLock()的效果就是同一时间只允许一个线程执行lock()方法后面的代码

 

2、ThreadA.java

package ReentrantReadWriteLock;public class ThreadA extends Thread{    private Service service ;        public ThreadA(Service service){        super();        this.service = service;    }        @Override    public void run(){        service.write();    }        }

 

 

3、ThreadB.java

package ReentrantReadWriteLock;public class ThreadB extends Thread{private Service service ;        public ThreadB(Service service){        super();        this.service = service;    }        @Override    public void run(){        service.write();    }        }

 

 

4、Run.java

package ReentrantReadWriteLock;public class Run {    public static void main(String[] args) {                Service service = new Service();        ThreadA a = new ThreadA(service);        a.setName("A");        ThreadB b = new ThreadB(service);        b.setName("B");        a.start();        b.start();    }}

 

可以自己更改ThreadA和ThreadB类中的run()方法里的read()、write()方法,实验"读写"、"写读"、"写写"

 

转载于:https://www.cnblogs.com/Donnnnnn/p/7237699.html

你可能感兴趣的文章
2017-2018-1 20155220 《信息安全系统设计基础》课下实践——实现mypwd
查看>>
jquery/js不支持ie9以下版本的方法或属性
查看>>
Swift基础
查看>>
前端开发 - CSS - 上
查看>>
集成备注
查看>>
CSRF原理
查看>>
HDU 1518 Square(Dfs)
查看>>
Mysql基础3
查看>>
linux脚本定时备份数据库表(详解)
查看>>
C++中的类-------1.类的构造与析构
查看>>
Java文件编译出现 “编码 GBK 的不可映射字符”
查看>>
java 出生日期 计算年龄
查看>>
静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
查看>>
Jmeter GIS调用-->参数化+正则表达式提取器+后置处理器+逻辑控制器
查看>>
Java邻接表表示加权有向图,附dijkstra最短路径算法
查看>>
Java中的static关键字解析
查看>>
识别颜色
查看>>
vue-cli设置proxyTable 跨域
查看>>
【AI】基本概念-准确率、精准率、召回率的理解
查看>>
ResNet——Deep Residual Learning for Image Recognition
查看>>