zoukankan      html  css  js  c++  java
  • AbstractQueuedSynchronizer,Lock,Synchronized

    Lock和Synchronized的区别

    Lock实现了与synchronized相同的互斥性和内存可见性。

    synchronized代码简单,并且与处理异常操作实现了很好的交互。 synchronized是可重入锁。

    Lock提供了一种无条件的,可轮询的,定时的以及可中断的锁获取操作,所有加锁和释放锁都是显式的。

    ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性。 并且提供了可重入的加锁语义。它还为锁的不可用问题提供了更高的灵活性。

     ReentrantLock提供了更好的活跃性,性能,公平性。

    synchronized代码整洁简单

    ReentrantLock必须在finally中释放。

    ReentrantLock与AbstractQueuedSynchronizer  http://www.importnew.com/24006.html

    https://blog.csdn.net/yanyan19880509/article/details/52345422/

    http://ifeve.com/introduce-abstractqueuedsynchronizer/

    https://blog.csdn.net/tb3039450/article/details/69056169

    AbstractQueuedSynchronizer  

    1:构建同步器类

    2:管理同步器中的状态(基于状态的同步器)

    3:维护一个资源队列,资源是线程。

    AbstractQueuedSynchronizer 用来管理同步器的状态。可以用它构建同步器(ReentrantLock等)和其它同步框架。

    AbstractQueuedSynchronizer给定一个状态,然后将其封装到锁的子类里面,可以为自定义锁设置一些自定义内容,比如最大访问线程数。

    AQS维护的队列是当前等待资源的队列。

    每个Condition维护着一个队列,该队列的作用是维护一个等待singal信号的队列。 

    semphore构建边界队列时,可以使用。

    ExecutorService 异步框架。

    创建线程池的两种方式:

    1:根据线程工厂创建线程池,可以创建任意多的线程。

            ThreadFactory threadFactory=Executors.defaultThreadFactory();
            ExecutorService threadPoolExecutor = Executors.newCachedThreadPool(threadFactory);

    2:指定线程池的大小

    ExecutorService threadPoolExecutor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
      
  • 相关阅读:
    数据库锁表及阻塞的原因和解决办法
    JS中的this都有什么用?
    vue打包要点
    Vue.js的虚拟dom
    JS继承方式
    JS中的浅拷贝和深拷贝。
    详解计算机原码,反码,补码。
    经常被问到的面试题1
    eslint规则说明
    git常用命令总结
  • 原文地址:https://www.cnblogs.com/liyafei/p/9420374.html
Copyright © 2011-2022 走看看