zoukankan      html  css  js  c++  java
  • 解决在高并发情况下出现数字混乱的问题

    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();
      }
     }
     
    }
  • 相关阅读:
    Ubuntu安装Oracleclient远程连接数据库
    解决报错:Unable to process Jar entry [org/springframework/jmx/export/annotation/*****]
    解决报错:The import javax.servlet.annotation cannot be resolved
    解决导入MAVEN项目报错Dynamic Web Module 3.1 requires Java 1.7 or newer.
    python批量下载链接图片
    thrax的安装
    cmake下载与使用(含cmake安装包)
    NFA转换为DFA
    杂记
    attention机制
  • 原文地址:https://www.cnblogs.com/fliay/p/7106959.html
Copyright © 2011-2022 走看看