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

      

  • 相关阅读:
    Django集成CAS
    JAVA命名规范
    Mybatis(5)——动态SQL
    Mybatis(4)——ResultMap
    Mybatis(3)——参数处理
    Mybatis(2)——Mapper映射文件
    Mybatis(1)——配置文件
    Gson(http://www.jianshu.com/p/e740196225a4)
    Gson中fromJson方法
    SessionAttributes和ModelAttribute
  • 原文地址:https://www.cnblogs.com/2nao/p/6629518.html
Copyright © 2020-2023  润新知