博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUC包中多线程之读写锁
阅读量:5137 次
发布时间:2019-06-13

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

当多个线程同时对一个类的属性进行读写操作时,往往会涉及到多线程之间的通信问题。

如果是多线程同时(写写)或者多线程同时(读写),往往希望线程之间是“互斥的”,也就是当其中一个线程访问该类的一个熟悉时(不管是读还是写)都需要对该读写方法进行加锁,以免其他线程在此期间争抢该读写方法导致多线程访问的数据有误。

以上的情况不可避免的带来效率的下降,那么我们现在来考虑下面这种情况,如果是多线程同时进行读,这种情况是允许他们同时访问的,效率会提高。

jdk1.5之后提供了Java.util.concurrent包,其中提供了ReadWriteLock这个接口,提供了ReentrantReadWriteLock的实现类,内部有readlock和writelock两个方法,用于实现单独对读写锁进行区别,这个避免了Lock类的加锁方法对读的方法单独占用。

1 package xianchengtest; 2  3 import java.util.concurrent.locks.ReadWriteLock; 4 import java.util.concurrent.locks.ReentrantReadWriteLock; 5  6 public class TestReadWriteLock { 7  8     public static void main(String[] args) { 9         ReadWriteLockDemo rw = new ReadWriteLockDemo();10         //一个写线程11         new Thread(new Runnable() {12             13             @Override14             public void run() {15                 rw.set((int)(Math.random() * 101));16             }17         },"Write").start();18         //多个读线程19         for (int i = 0; i < 100; i++) {20             21             new Thread(new Runnable() {22                 @Override23                 public void run() {24                     rw.get();25                 }26             },"Read").start();27         }28     }29 }30 31 class ReadWriteLockDemo {32     private int number= 0;33     private ReadWriteLock lock = new ReentrantReadWriteLock();34     35     //read36     public void get() {37         lock.readLock().lock();38         try {39             40             System.out.println(Thread.currentThread().getName()+ " : " + number);41         } finally {42             lock.readLock().unlock();43         }44     }45     46     //write47     public void set(int number) {48         lock.writeLock().lock();49         try {50             System.out.println(Thread.currentThread().getName());51             this.number = number;52         } finally {53             lock.writeLock().unlock();54         }55     }56 }

 

转载于:https://www.cnblogs.com/blog-of-zxf/p/11126844.html

你可能感兴趣的文章
ASP导出数据到excel遇到的一些问题
查看>>
pdf文件之itextpdf插入html内容以及中文解决方案
查看>>
恭送功臣
查看>>
CSS清除浮动
查看>>
犯罪都市
查看>>
Android ViewPager再探:增加滑动指示条
查看>>
angualr路由守卫
查看>>
分布式锁-多种实现方式
查看>>
delphi 安卓配置教程
查看>>
Spring基础
查看>>
DBDocumentGenerator使用
查看>>
boost c++框架的用户体验
查看>>
[LeetCode] 133. Clone Graph 克隆无向图
查看>>
关于博客园首页
查看>>
遍历数据并插入页面的几种方式
查看>>
MYSQL 简单的建库操作代码
查看>>
制作listView高效率万能适配器
查看>>
关于递归的初级理解
查看>>
[置顶] Servlet入门---张国亮--->总结心德第二季
查看>>
JSp动作指令
查看>>