• 解决在高并发情况下出现数字混乱的问题


    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();
      }
     }
     
    }
  • 相关阅读:
    win2003服务器网站和数据库的二周自动备份
    尝试jquery插件的开发
    Git 代码版本管理
    实验三、UML 建模工具的安装与使用
    实验五 单元检测
     实验四 代码评审
    实验二 结队编程(第二阶段)
    结队编程
    第一次实验
    用live writer发布文章文章中含时产生的bug
  • 原文地址:https://www.cnblogs.com/fliay/p/7106959.html
Copyright © 2020-2023  润新知