线程学习之读写锁
来源:互联网 发布:淘宝介入申请假冒品牌 编辑:程序博客网 时间:2024/06/08 16:10
读写锁是指多个线程读锁不互斥,读锁和写锁互斥,写锁和写锁互斥
不多说了,看代码
package com.lyj;import java.util.Random;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadAndWriterLockDemo { /** * @param args */ public static void main(String[] args) { final Share s = new Share(); // 10个读线程和10个写线程 for (int i = 1; i <= 10; i++) { new Thread(new Runnable() { @Override public void run() { s.readData(); } }).start(); new Thread(new Runnable() { @Override public void run() { s.writeData(); } }).start(); } }}/** * 加读锁:多个线程可以同时读,读的过程中不能被写线程打断 加写锁:只能同时一个写线程写,不能被读线程打断 * * @author lyj * */class Share { private Integer data = null; private ReadWriteLock wrl = new ReentrantReadWriteLock(); // 读数据 public void readData() { wrl.readLock().lock(); try { System.out.println("开始读数据"); Thread.sleep(1000); System.out.println("data= " + data); System.out.println("读完成"); } catch (Exception e) { e.printStackTrace(); } finally { wrl.readLock().unlock(); } } // 写数据 public void writeData() { wrl.writeLock().lock(); try { System.out.println("开始写数据"); Thread.sleep(1000); data = new Random().nextInt(); System.out.println("写完成"); } catch (Exception e) { e.printStackTrace(); } finally { wrl.writeLock().unlock(); } }}
结果:
从结果可以看出,多个线程可以同时进入读的方法,只有他们都释放读锁后才有可能执行写的方法,只有释放了写锁后才能继续执行写方法或读方法
- 线程学习之读写锁
- 线程学习之读写锁模拟缓存系统
- 线程编程之读写锁
- 线程使用之读写锁
- 线程同步之读写锁
- Linux线程同步之读写锁
- java 之 读写锁 线程间互斥
- 线程通信机制之轻量级读写锁
- Linux线程同步之读写锁
- linux线程同步之读写锁
- linux线程同步之读写锁
- Linux线程同步之读写锁
- linux线程同步之读写锁
- Linux线程同步之读写锁
- 解说线程安全之读写锁
- Linux程序设计学习笔记----多线程编程线程同步机制之互斥量(锁)与读写锁
- UNIX环境高级编程学习之第十一章线程-使用读写锁
- linux多线程学习笔记四---线程同步之互斥锁、读写锁和条件变量
- HDOJ 1094
- 关于接口的多态性问题 接口的实现
- HDOJ 1091
- 如何获取excel 中的 某几个列的值
- 2011-9-17 21:22:01
- 线程学习之读写锁
- java学习之外部类使用内部类
- 0918
- JAVA第一天
- php之adodb简介
- 数据库收缩日志
- 逻辑地址、线性地址、物理地址和虚拟地址
- C 语言前置++ 与后置++
- 找类加载器的名字