锁是java并发编程中最主要的同步机制。JAVA中完成加锁是经由过程Synchronized关键字以及java.util.concurrent包下的相干类。
Java中锁的观点
自旋锁 : 是指当一个线程在猎取锁的时刻,假如锁已被其他线程猎取,那末该线程将轮回守候,然后不停推断锁是不是能够被胜利猎取,直到猎取到锁才会退出轮回。
乐观锁 : 假定没有争执,在修正数据时假如发明数据和之前猎取的不一致,则读最新数据,修正后重试修正
消极锁 :假定会发作并发争执,同步一切对数据的相干操纵,从读数据就最先上锁
独享锁(写) : 给资本加上写锁,具有该锁的线程能够修正资本,其他线程不能再加锁(单写)
同享锁(读) : 给资本加上读锁后只能读不能改,其他线程也只能加读锁,不能加写锁 (多读)
可重入锁 :线程拿到一把锁后,能够自在进入统一把锁所同步的代码
不可重入锁 :线程拿到一把锁后,不能够自在进入统一把锁所同步的代码
平正锁 :争抢锁的递次,根据先来后到的递次
非平正锁 :争抢锁的递次,不根据先来后到的递次
Java中几种主要的锁完成体式格局:synchronized, ReentrantLock, ReentrantReadWriteLock
同步关键字:synchronized
锁的作用域:对象锁,类锁,分布式锁
synchronized特征:可重入,独享,消极锁
锁优化:
锁消弭是发作在编译器级别的一种锁优化体式格局,是指虚拟机立即编译器在运行时,对一些代码上要求同步,然则被检测到不可能存在同享数据合作的锁举行削除(开启锁消弭的参数:-xx:+DoEscapeAnalysis -XX:+EliminateLocks)
锁粗化:是指有些情况下我们反而愿望把很屡次锁的要求合并成一个要求,以下降短时间内大批锁要求、同步、开释带来的机能消耗
Note: synchronized关键字,不仅完成同步,JMM中划定,synchronized要保证可见性(不能够被缓存)
synchronized用法代码示例:
public class Counter { private static int i = 0; // 等价于 synchronized(this) public synchronized void update() { i++; } public void updateBlock() { synchronized (this) { i++; } } // 等价于 synchronized (Counter.class) public static synchronized void staticUpdate() { i++; } public static void staticUpdateBlock() { synchronized (Counter.class) { i++; } } }
以上就是java锁是什么?的细致内容,更多请关注ki4网别的相干文章!