java锁是用来干什么的,java中的锁什么意思

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: