package com.java.test; import java.math.BigDecimal; import java.util.Random; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class RateService { //设置BigDecimal类型的数据 private BigDecimal rate = BigDecimal.ZERO; //添加读写锁来对读写操作进行加锁。 private ReadWriteLock rwlock=new ReentrantReadWriteLock(); public BigDecimal getRate() { rwlock.readLock().lock();//添加读锁 BigDecimal rate = this.rate; rwlock.readLock().unlock();//解锁 return rate; } public void setRate(BigDecimal rate) { rwlock.writeLock().lock();//添加写锁 this.rate = rate; rwlock.writeLock().unlock();//解锁 } public static class write implements Runnable{ RateService rateService = new RateService(); public write(RateService rateService){ this.rateService=rateService; } @Override public void run() { BigDecimal newrate = new BigDecimal(new Random().nextInt(100)); //对当前线程进行同步操作 synchronized(this) { rateService.setRate(newrate); //System.nanoTime() 是一个获取计算机执行时间的方法 获取精度在纳秒 System.out.println(System.nanoTime()+":"+Thread.currentThread().getName()+""+newrate); } } } public static class read implements Runnable{ RateService rateService = new RateService(); public read(RateService rateService){ this.rateService=rateService; } @Override public void run() { System.out.println(Thread.currentThread().getName()+":"+this.rateService.getRate()); } } public static void main(String[] args) { RateService rateService =new RateService(); write w = new write(rateService); for(int i=0;i<10;i++){ Thread t= new Thread(w); t.setName("write"+i+":"); t.start(); } read r = new read(rateService); for(int i =0 ;i<10;i++){ Thread t = new Thread(r); t.start(); } } }