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

}

  

时间: 2024-11-18 19:27:13

reentrantlock与synchronized的区别.及Atomics的使用的相关文章

ReentrantLock 与 synchronized 一点区别

ReentrantLock 与 synchronized 相比主要特性: 1.等候时间锁; 2.可中断锁; 3.多个条件变量; 等候时间锁实现主要通过 reentrantlock.tryLock(5,TimeUnit.SECONDS)方法实现; 多个条件变量可通过reentrantlock.newCondition()   new出多个实例实现; 可中断锁在BlockingQueue中经常被用到,简单通过代码理解 package net.flyingfat.lock; import java.u

ReentrantLock和synchronized的区别

一.ReentrantLock类 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票.定时锁等候和可中断锁等候的一些特性.此外,它还提供了在激烈争用情况下更佳的性能(换句话说,当许多线程都想访问共享资源时,JVM 可以花更少的时候来调度线程,把更多时间用在执行线程上)       Reentrant 锁意味着什么呢?简单来说,它有一个与锁相关的获取计数器,如果拥有锁的某个线程再次得到锁,那么获取计数器就加1,然后锁需

ReentrantLock详解 以及与synchronized的区别

ReentrantLock lock = new ReentrantLock(); //参数默认false,不公平锁 ReentrantLock lock = new ReentrantLock(true); //公平锁 lock.lock(); //如果被其它资源锁定,会在此等待锁释放,达到暂停的效果 try { //操作 } finally { lock.unlock(); } Java 理论与实践: JDK 5.0 中更灵活.更具可伸缩性的锁定机制 新的锁定类提高了同步性 -- 但还不能现

ReenTrantLock可重入锁(和synchronized的区别)总结

可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大.两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁. 锁的实现: Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系统来控制实现和用户自己敲代码实现的区别.前者的实现是比较难见到的,后者有直接的源码可供阅读. 性能的区别: 在S

ReentrantLock和synchronized区别和联系?

相同:ReentrantLock提供了synchronized类似的功能和内存语义,都是可重入锁. 不同: 1.ReentrantLock功能性方面更全面,比如时间锁等候,可中断锁等候,锁投票等,因此更有扩展性.在多个条件变量和高度竞争锁的地方,用ReentrantLock更合适,ReentrantLock还提供了Condition,对线程的等待和唤醒等操作更加灵活,一个ReentrantLock可以有多个Condition实例,所以更有扩展性. 2.ReentrantLock必须在finall

Lock与synchronized 的区别

1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情 ReentrantLock获取锁定与三种方式:    a)  lock(), 如果获取了锁立即返回,

Java中的ReentrantLock和synchronized两种锁定机制的对比

多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言.核心类库包含一个 Thread 类,可以用它来构建.启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile .在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它变得更容易了. synchronized 快速回顾 把代码块声明为 synchronized,有两个

(转) Java中的ReentrantLock和synchronized两种锁定机制的对比

原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html 多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言.核心类库包含一个 Thread 类,可以用它来构建.启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 -- synchronized 和 volatile .在简化与平台无关的并发类的开发的同时,它决没有使并

[转] Java的ReentrantLock和synchronized两种锁定机制

多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言.核心类库包含一个 Thread 类,可以用它来构建.启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile .在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它变得更容易了. synchronized 快速回顾 把代码块声明为 synchronized,有两个