java锁是用来干什么的,java中的锁什么意思
锁是java并发编程中最重要的同步机制。JAVA中的锁定是通过java.util.concurrent包下的Synchronized关键字和相关类实现的。
Java中锁的概念
自旋锁(Spin lock):当一个线程正在获取一个锁时,如果这个锁已经被其他线程获取了,那么这个线程就会在一个循环中等待,然后不断地判断这个锁是否能够被成功获取,直到被获取了才会退出循环。
乐观锁定:假设没有冲突,如果修改数据时发现数据与之前的数据不一致,读取最新的数据,修改后重试修改。
悲观锁:假设会有并发冲突,同步对数据的所有相关操作,从读取数据开始锁。
排他锁(写):向资源添加写锁。有这个锁的线程可以修改资源,其他线程不能锁(只写)。
共享锁(读):将读锁添加到资源后,它只能被读取,不能被更改。其他线程只能添加读锁,不能添加写锁(read more)。
重入锁(Re-entry lock):线程获得锁后,可以自由进入被同一个锁同步的代码。
不可重入锁(Non-reentrant lock):线程获得一个锁后,就不能自由进入被同一个锁同步的代码。
公平锁:争锁的顺序,按照先到先得的顺序。
锁不公平:争夺锁的顺序不是先来后到的顺序。
Java中几种重要的锁实现方式:同步、可重入锁、可重入读写锁
同步关键字:同步
锁的作用域:对象锁、类锁、分布式锁
synchronized特性:重入、独占、悲观锁
锁定优化:
锁消除是一种编译器层面的锁优化方法,是指虚拟机即时编译器在运行时,去除一些代码中需要同步的锁,但被检测到没有共享数据竞争的可能性(启动锁消除的参数:-xx:doescapeanalysis-xx:elite locks)。
锁粗化:在某些情况下,我们希望将许多锁请求合并为一个请求,以减少短时间内大量锁请求、同步和释放所造成的性能损失。
注意:synchronized关键字不仅实现了同步,而且在JMM中规定synchronized应该是可见的(不能缓存)。
同步使用代码示例:
公共类计数器{
private static int I=0;
//相当于同步(this)
公共同步void更新(){
我;
}
public void updateBlock() {
同步(这){
我;
}
}
//相当于synchronized (Counter.class)
公共静态同步void staticUpdate() {
我;
}
public static void staticUpdateBlock(){
同步(计数器.类){
我;
}
}
}以上是java锁是什么?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。