synchronized、Lock、ReentrantLock、ReadWriteLock区别,threadlocal怎么解决线程同步问题
2018-03-20 10:53
471 查看
1.synchronized 用于同步方法和代码块,执行完后自动释放锁
2.Lock是一个锁的接口,提供获取锁和解锁的方法(lock,trylock,unlock)
3.ReentrantLock 重入锁
Lock有一个实现类:ReentrantLock,它实现了Lock里面的方法,但是使用Lock的时候必须注意它不会像synchronized执行完成之后或者抛出异常之后自动释放锁,而是需要你主动释放锁,所以我们必须在使用Lock的时候加上try{}catch{}finally{}块,并且在finally中释放占用的锁资源。
Lock和synchronized最大的区别就是当使用synchronized,一个线程抢占到锁资源,其他线程必须像SB一样得等待;而使用Lock,一个线程抢占到锁资源,其他的线程可以不等待或者设置等待时间,实在抢不到可以去做其他的业务逻辑。
4.ReadWriteLock 读写锁
它可以实现读写锁,当读取的时候线程会获得read锁,其他线程也可以获得read锁同时并发的去读取,但是写程序运行获取到write锁的时候,其他线程是不能进行操作的,因为write是排它锁,而上面介绍的两种不管你是read还是write没有抢到锁的线程都会被阻塞或者中断,它也是个接口,里面定义了两种方法readLock()和writeLock(),他的一个实现类是ReentrantReadWriteLock。
threadlocal怎么解决线程同步问题?
而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
2.Lock是一个锁的接口,提供获取锁和解锁的方法(lock,trylock,unlock)
3.ReentrantLock 重入锁
Lock有一个实现类:ReentrantLock,它实现了Lock里面的方法,但是使用Lock的时候必须注意它不会像synchronized执行完成之后或者抛出异常之后自动释放锁,而是需要你主动释放锁,所以我们必须在使用Lock的时候加上try{}catch{}finally{}块,并且在finally中释放占用的锁资源。
Lock和synchronized最大的区别就是当使用synchronized,一个线程抢占到锁资源,其他线程必须像SB一样得等待;而使用Lock,一个线程抢占到锁资源,其他的线程可以不等待或者设置等待时间,实在抢不到可以去做其他的业务逻辑。
4.ReadWriteLock 读写锁
它可以实现读写锁,当读取的时候线程会获得read锁,其他线程也可以获得read锁同时并发的去读取,但是写程序运行获取到write锁的时候,其他线程是不能进行操作的,因为write是排它锁,而上面介绍的两种不管你是read还是write没有抢到锁的线程都会被阻塞或者中断,它也是个接口,里面定义了两种方法readLock()和writeLock(),他的一个实现类是ReentrantReadWriteLock。
threadlocal怎么解决线程同步问题?
而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
相关文章推荐
- ReentrantReadWriteLock & ReentrantLock & Synchronized 区别
- JDK1.8 StampedLock: 解决ReentrantReadWriteLock在读多写少情况下,写线程饥饿问题
- 关于ReentrantReadWriteLock两个问题及解决心得(转)
- java锁:synchronized、ReadWriteLock、ReentrantReadWriteLock*
- 关于synchronized以及ReetrantLock、ReentrantReadWriteLock的选择
- Lock、synchronized和ReadWriteLock的区别和联系以及Condition
- Lock、ReentrantLock、synchronized、ReentrantReadWriteLock使用
- 同步中的四种锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
- java多线程基础---synchronized与ReentrantReadWriteLock的介绍与比较
- 如何用ReentrantReadWriteLock实现读者写者问题,且写者优先级更高
- Android并发编程之如何使用ReentrantReadWriteLock替代synchronized来提高程序的效率
- Java:多线程,线程同步,同步锁(Lock)的使用(ReentrantLock、ReentrantReadWriteLock)
- ReentrantReadWriteLock 与 synchronized 性能差别
- Java多线程——锁(Synchronized、Lock、ReentrantLock、ReadWriteLock、ReentrantReadWriteLock)
- Java:多线程,线程同步,同步锁(Lock)的使用(ReentrantLock、ReentrantReadWriteLock)
- Synchronized与ReentrantReadWriteLock性能比较
- Android并发编程之如何使用ReentrantReadWriteLock替代synchronized来提高程序的效率
- java多线程基础---synchronized与ReentrantReadWriteLock的介绍和比较
- Java 并发问题的处理神器:ReentrantReadWriteLock
- ReentrantReadWriteLock & ReentrantLock & Synchronized 区别