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());
      
  • 相关阅读:
    3年度研发项目情况项目目标文档
    2系统利益相关者描述案例
    讨论结果
    本学期《软件需求分析》需要掌握的内容(个人总结)
    第二周进度条
    四则运算
    第一周进度记录
    java web
    ke tang zuo ye
    2015-05-26 随笔
  • 原文地址:https://www.cnblogs.com/liyafei/p/9420374.html
Copyright © 2011-2022 走看看