wangqi的blog

贫,气不改;达,志不改


  • 首页

  • 关于

  • 归档

  • 搜索

Semaphone与AbstractQueuedSynchronizer

发表于 2018-01-11

Semaphone也是一个类似锁的组件,它管理的是多个资源的分配,实现的是AbstractQueuedSynchronizer抽象类,有了前面ReentrantLock与AbstractQueuedSynchronizer的铺垫,Semaphone的分析变得无比轻松。

和ReentrantLock类似,Semaphone也分为公平锁和非公平锁。方便起见只分析非公平锁,两者差别不大。

阅读全文 »

ReentrantLock与AbstractQueuedSynchronizer

发表于 2018-01-10

AbstractQueuedSynchronizer(AQS)是许多Java并发控制类的基础,比如ReentrantLock、Semaphone、CountDownLatch等都是基于AQS来完成的,因此了解AQS的基本原理是了解Java并发控制类的基础。

AQS是一个抽象类,需要子类的实现其中的功能,所以我们选取ReentrantLock来分析AQS的工作原理。

在构造ReentrantLock的时候可以指定是否公平,我们先以非公平锁为例讲解。

阅读全文 »

AbstractQueuedSynchronizer

发表于 2018-01-09

为依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件、等等)提供一个实现的框架。此类的设计目标是为大多数依赖单个原子int值来表示状态的同步器提供一个有用的基础。子类必须定义改变状态的受保护的方法,定义何种状态对于此对象意味着被获取或被释放。有了这些条件之后,此类中的其他方法就可以实现所有排队和阻塞机制。子类可以维护其他状态字段,但只是为了获得同步而只追踪使用getState()、setState(int)和compareAndSetState(int, int)方法来操作以原子方式更新的int值。

阅读全文 »

ThreadPoolExecutor分析

发表于 2018-01-08

public class ThreadPoolExecutor extends AbstractExecutorService

一个ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用Executors工厂方法配置

线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个ThreadPoolExecutor还维护着一些基本的统计数据,如完成的任务数。

为了便于跨大量上下文使用,此类提供了很多可调整的参数和扩展钩子。但是强烈建议程序员使用较为方便的Executors工厂方法Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)、Executors.newFixedThreadPool(int)(固定大小线程池)和Executors.newSingleThreadExecutor()(单个后台线程),它们均为大多数使用场景预定义了设置。否则,在手动配置和调整此类时,使用以下指导:

阅读全文 »

线程池整理

发表于 2018-01-08

线程池

Executors类里面提供了一些静态工厂,生成一些常用的线程池

  1. newSingleThreadExecutor: 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

    1
    2
    3
    4
    5
    6
    public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
    (new ThreadPoolExecutor(1, 1,
    0L, TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue<Runnable>()));
    }
阅读全文 »

Spring启动过程分析.番外(注释整理)

发表于 2018-01-06

@PropertySource

指定配置文件的地址

  • name:指定属性源的名称
  • value:指定属性文件的位置
  • ignoreResourceNotFound:默认为false。如果设为true,忽略value中不存在的属性文件
  • encoding:指定属性文件的编码
  • factory:指定一个自定义的PropertySourceFactory类
    阅读全文 »

Spring启动过程分析.番外(ConfigurationClassPostProcessor)

发表于 2018-01-05

ConfigurationClassPostProcessor是一个用于处理配置类的处理器,它在Spring启动过程中在invokeBeanFactoryPostProcessors方法中被调用:

  1. 获取beanFactory中的BeanDefinitionRegistryPostProcessor
  2. 筛选实现了PriorityOrdered接口的BeanDefinitionRegistryPostProcessor
  3. 调用BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法
阅读全文 »

Spring启动过程分析6(finishRefresh)

发表于 2018-01-02

finishRefresh方法调用LifecycleProcessor的onRefresh()方法,发送ContextRefreshedEvent

阅读全文 »

Spring启动过程分析5(finishBeanFactoryInitialization)

发表于 2018-01-02

实例化BeanFactory中已经被注册但是未实例化的所有实例(懒加载的不需要实例化)。比如invokeBeanFactoryPostProcessors方法中根据各种注解解析出来的类,在这个时候都会被初始化。实例化的过程各种BeanPostProcessor开始起作用。

阅读全文 »

Spring启动过程分析4(registerBeanPostProcessors)

发表于 2017-12-29

从Spring容器中找出实现了BeanPostProcessor接口的bean,并设置到BeanFactory的属性中。之后bean被实例化的时候会调用这个BeanPostProcessor。

该方法委托给了PostProcessorRegistrationDelegate类的registerBeanPostProcessors方法执行。

阅读全文 »

1…17181920

wangqi

199 日志
GitHub E-Mail
© 2025 wangqi
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4