Java并发学习之十五——使用读写锁同步数据访问
2014-09-17 14:34
411 查看
本文是学习网络上的文章时的总结,感谢大家无私的分享。
读写锁重要的是写锁的使用,只用一个入口。
下面是读写锁使用的例子
读写锁重要的是写锁的使用,只用一个入口。
下面是读写锁使用的例子
package chapter2; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class PricesInfo { private int price1; private int price2; private ReadWriteLock lock; public PricesInfo(){ price1 = 1; price2 = 1; lock = new ReentrantReadWriteLock(); } public int getPrice1() { lock.readLock().lock(); int value = price1; lock.readLock().unlock(); return value; } public void setPrice1(int price1) { this.price1 = price1; } public int getPrice2() { lock.readLock().lock(); int value = price2; lock.readLock().unlock(); return value; } public void setPrice2(int price2) { this.price2 = price2; } public void setPrices(int price1,int price2){ lock.writeLock().lock(); this.price1 = price1; this.price2 = price2; lock.writeLock().unlock(); } }
package chapter2; public class Reader implements Runnable{ private PricesInfo pricesInfo; public Reader(PricesInfo pricesInfo){ this.pricesInfo = pricesInfo; } @Override public void run() { for(int i=0;i<10;i++){ System.out.printf("%s:Price 2:%d\n", Thread.currentThread().getName(),pricesInfo.getPrice2()); System.out.printf("%s:Price 1:%d\n", Thread.currentThread().getName(),pricesInfo.getPrice1()); } } }
package chapter2; import java.util.Random; public class Writer implements Runnable{ private PricesInfo pricesInfo; public Writer(PricesInfo pricesInfo){ this.pricesInfo = pricesInfo; } @Override public void run() { for(int i=0;i<3;i++){ int p1 = new Random().nextInt(47); int p2 = new Random().nextInt(47)*10; System.out.println("Writer:Attempt to modify the prices."+p1+" price2:"+p2); pricesInfo.setPrices(p1, p2); System.out.println("Writer:Prices have been modified."+p1+" price2:"+p2); try { Thread.sleep(2); } catch (Exception e) { // TODO: handle exception } } } }
package chapter2; public class Main6 { /** * <p> * </p> * @author zhangjunshuai * @date 2014-9-17 上午11:17:50 * @param args */ public static void main(String[] args) { PricesInfo pricesInfo = new PricesInfo(); Reader reader[] = new Reader[5]; Thread threadsReader[] = new Thread[5]; for (int i = 0; i < threadsReader.length; i++) { reader[i] = new Reader(pricesInfo); threadsReader[i]=new Thread(reader[i]); } Writer writer = new Writer(pricesInfo); Thread threadWriter = new Thread(writer); for (int i = 0; i < threadsReader.length; i++) { threadsReader[i].start(); } threadWriter.start(); } }
相关文章推荐
- Java并发学习之十五——使用读写锁同步数据訪问
- 【Java并发编程实战】– 使用读写锁实现同步数据访问 lock_2
- Java并发编程-09-使用读写锁同步数据访问
- java并发编程实战手册第二章使用读写锁实现同步数据访问
- java多线程-使用ReadWriteLock同步数据访问
- JavaEE Tutorials (13) - 使用锁定控制对实体数据的并发访问
- java读写锁实现数据同步访问
- Java并发学习之十三——在同步代码中使用条件
- 使用读写锁实现同步数据访问
- Jamendo 使用java.net.URL类访问网络数据
- hadoop学习之-使用ODCH工具实现oralce外部表访问HDFS数据文件
- 1.使用java.net.URL类访问网络数据
- 使用java访问oracle数据的类
- 微软企业库4.1学习笔记(三十二)数据访问模块 在应用中使用数据访问模块
- 并发学习之:不使用内核对象同步的并发队列
- 使用ASP等客户端来访问Java的Web Service,取得复杂数据(DTO)
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
- 使用File类访问本地文件 java学习(二)
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份