Lock & Synchronzed

基础概念

可重入锁rentrantLock与syncronized区别

1.等待可中断   在持有锁的线程长时间不释放锁的时候,等待的线程可以选择放弃等待。 TryLock(long timeout,TimeUnit unit)

2.公平锁          按照申请锁的顺序来一次获得锁成为公平锁。

Synchronized非公平锁,ReentrantLock通过构造函数实现公平锁,new RenentrantLock(Boolean fair)

3.绑定多个Condition

通过多次newCondition可以获得多个Condition对象,简单实现比较复杂的线程同步功能,通过await(),signal();

本地锁ThreadLocal

1每个线程都有自己的局部变量

每个线程都有一个独立于其他线程的上下文来保存这个变量,一个线程的本地变量对其他线程是不可见的。

2独立于变量的初始化副本

ThreadLocal可以给一个初始值,而每个线程都会获得这个初始值的一个副本,这样才能保证不同的线程都有一份拷贝

扫描二维码关注公众号,回复: 3472750 查看本文章

3状态与某一线程相关联

本地锁不是用于解决共享变量的问题,不是为了协调线程同步而存在,而是为了方便每个线程处理自己的状态而引入的一个机制。
 

读写锁:读锁+写锁:

读锁:可以共享,多线程同时拥有

写锁:不能共享,只能有一个线程拥有。获取写锁时,其他线程全部释放读锁,获取后,其他线程不能获取读锁。

排它锁\独占锁:

某一时刻只能被一个线程占用,其他线程必须等待锁被释放之后才可能获取到锁

sychronized

Sychronized是Java中内置的语言级同步原语,可以实现多线程间访问之间的同步。Synchronized修饰:函数、函数语句[同步方法、同步代码块]、

作用域:1作用于某个实例对象内和某个类的范围内。2实现在类的范围内的某个方法的同步3让一个类的所有对象都在某个代码块的使用上同步。

Public synchronized static void test(){}

Public class Tester{public void test(){ synchronized(Tester.class){ 代码…}  }}
 

猜你喜欢

转载自blog.csdn.net/ddhmbbklyk2018/article/details/82844735