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();
}
}
}