纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Java阻塞锁 Java锁之阻塞锁介绍和代码实例

  2021-03-19 我要评论
想了解Java锁之阻塞锁介绍和代码实例的相关内容吗在本文为您仔细讲解Java阻塞锁的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java,锁,阻塞锁下面大家一起来学习吧

锁作为并发共享数据保证一致性的工具在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 这些已经写好提供的锁为我们开发提供了便利但是锁的具体性质以及类型却很少被提及本系列文章将分析JAVA下常见的锁名称以及特性为大家答疑解惑

阻塞锁

阻塞锁与自旋锁不同改变了线程的运行状态
在JAVA环境中线程Thread有如下几个状态:

1新建状态

2就绪状态

3运行状态

4阻塞状态

5死亡状态

阻塞锁可以说是让线程进入阻塞状态进行等待当获得相应的信号(唤醒时间) 时才可以进入线程的准备就绪状态准备就绪状态的所有线程通过竞争进入运行状态

JAVA中能够进入\退出、阻塞状态或包含阻塞锁的方法有 synchronized 关键字(其中的重量锁)ReentrantLockObject.wait()\notify(),LockSupport.park()/unpart()(j.u.c经常使用)

下面是一个JAVA 阻塞锁实例:

package lock;

import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.concurrent.locks.LockSupport;

public class CLHLock1 {
  public static class CLHNode {
    private volatile Thread isLocked;
  }

  @SuppressWarnings("unused")
  private volatile CLHNode                      tail;
  private static final ThreadLocal<CLHNode>              LOCAL  = new ThreadLocal<CLHNode>();
  private static final AtomicReferenceFieldUpdater<CLHLock1, CLHNode> UPDATER = AtomicReferenceFieldUpdater.newUpdater(CLHLock1.class,
                                          CLHNode.class, "tail");

  public void lock() {
    CLHNode node = new CLHNode();
    LOCAL.set(node);
    CLHNode preNode = UPDATER.getAndSet(this, node);
    if (preNode != null) {
      preNode.isLocked = Thread.currentThread();
      LockSupport.park(this);
      preNode = null;
      LOCAL.set(node);
    }
  }

  public void unlock() {
    CLHNode node = LOCAL.get();
    if (!UPDATER.compareAndSet(this, node, null)) {
      System.out.println("unlock\t" + node.isLocked.getName());
      LockSupport.unpark(node.isLocked);
    }
    node = null;
  }
}

在这里我们使用了LockSupport.unpark()的阻塞锁 该例子是将CLH锁修改而成

阻塞锁的优势在于阻塞的线程不会占用cpu时间不会导致 CPu占用率过高但进入时间以及恢复时间都要比自旋锁略慢

在竞争激烈的情况下 阻塞锁的性能要明显高于 自旋锁

理想的情况则是; 在线程竞争不激烈的情况下使用自旋锁竞争激烈的情况下使用阻塞锁

(全文完)


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式