基础概念
可重入锁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){ 代码…} }} |