zoukankan      html  css  js  c++  java
  • reentrantlock与synchronized的区别.及Atomics的使用

    ReentranLock是java.util.concurrent.locks中的一个类.需要显示的进行unclock

      提供了tryLock方法,锁被其他线程持有返回false,否则当前线程会持有锁,并返回true

      可以通过构造函数声明一个公平锁,效率较非公平锁低,按队列顺序获取锁

      提供了ReentrantReadWriteLock,用于读多写少并且读不需要互斥的场景,比互斥锁效率高很多

      ReentranLock的使用:  

      lock.lock();  

      try{

      //do something

      }finally{

      lock.unclock;

      }

      ReentrantReadWriteLock锁的使用:

      lock.writeLock().lock();//lock.readLock().lock();  

      try{

      //do something

      }finally{

      lock.writeLock().unlock();//lock.readLock().unlock();

      }

    Atomic

      jdk5增加了java.util.concurrent.atomic包,包含以Atomic开头的类,提供一些原子操作

    多线程计算器一般解决办法

    public class Demo5 {
        private int count=0;
        public int increase(){
            synchronized(this){
                count+=1;
                return count;
            }
        }
        public int decrease(){
            synchronized(this){
                count-=1;
                return count;
            }
        }
    
    }

    采用AtomicInteger后

    public class Demo5 {
        private AtomicInteger count=new AtomicInteger();
        public int increase(){
            return count.incrementAndGet();
        }
        public int decrease(){
            return count.decrementAndGet();
        }
    
    }

      

  • 相关阅读:
    Java进阶知识查漏补缺06
    SQL学习记录(concat)
    Restful API学习
    git学习
    获得xmlhttp对象
    vue-cli初接触
    vue初接触
    java使用百度UNIT
    JSON学习
    通用Mapper警告:建议修改基本类型为对应的包装类型!
  • 原文地址:https://www.cnblogs.com/2nao/p/6629518.html
Copyright © 2011-2022 走看看