读写锁样例
来源:互联网 发布:spring 获取端口号 编辑:程序博客网 时间:2024/06/06 00:32
package thread.lock;public class Test { public static void main(String[] args) { final Printer printer = new Printer(); Thread thread1 = new Thread(){ @Override public void run() { printer.read("thread1 read..."); printer.write("thread1 write..."); } }; Thread thread2 = new Thread(){ @Override public void run() { printer.read("thread2 read..."); printer.write("thread2 write..."); } }; thread1.start(); thread2.start(); }}
package thread.lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class Printer { ReadWriteLock lock = new ReentrantReadWriteLock(); /** * 读操作 * @author JIANGBIN * @param str */ public void read(String str){ lock.readLock().lock();//读锁1 try{ for (int i = 0; i < 3; i++) { try { System.out.println(str); Thread.sleep(200);//暂停100ms,不释放锁,以便更好的观察输出结果 } catch (InterruptedException e) { } } }finally{ lock.readLock().unlock();//解锁,要放在finnall块里面 } } /** * 写操作 * @author JIANGBIN * @param str */ public void write(String str){ lock.writeLock().lock();//写锁 try{for (int i = 0; i < 3; i++) { try { System.out.println(str); Thread.sleep(100);//暂停100ms,不释放锁,以便更好的观察输出结果 } catch (InterruptedException e) { } } }finally{ lock.writeLock().unlock();//解锁 } }}
输出结果:
thread1 read...thread2 read...thread2 read...thread1 read...thread2 read...thread1 read...thread2 write...thread2 write...thread2 write...thread1 write...thread1 write...thread1 write...
总结:读锁之间可以变法访问,读锁和写锁直接互斥,写锁和写锁之间互斥
0 0
- 读写锁样例
- 读写
- 读写
- 读写
- 文件读写、剪贴板读写
- 字符串读写、数组读写、字典读写
- TextFile读写
- 读写注册表
- 读写excel
- 读写XML
- 读写XML
- 读写Cookie
- 读写Cookie
- 读写文件
- 读写文本
- 文件读写
- 读写Cookie
- 读写注册表
- HDU2037 今年暑假不AC
- Unity3d 程序架构学习笔记
- 获取窗口宽度DisplayMetrics 类
- Eclipse颜色主题插件:Eclipse Color Theme
- 大学总结
- 读写锁样例
- JAVA函数调用的动态绑定
- BeanShell PreProcessor使用
- 日志管理框架:Log4j工具封装类
- RocketMQ,JStorm与Tair使用笔记
- 图算法12之图算法总结
- eclipse 配置生成java头文件(JNI)
- 莫队总结&bzoj 2038 小Z的袜子
- intellij idea创建maven web项目