并发编程--线程池拒绝策略RejectedExecutionHandler(三)

线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施。当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭。第二,任务数量超过线程池的最大限制。线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy和DiscardPolicy。ThreadPoolExecutor默认的拒绝策略是Abor...
阅读(61) 评论(0)

并发编程--线程池ThreadPoolExecutor实现原理(二)

ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为"存放一定数量线程的一个线程集合。线程池允许若个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。"1. workersworkers是HashSet类型,即它是一个Worker集合...
阅读(201) 评论(0)

并发编程--线程池Executor(一)

合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。线程池的架构图如下:1....
阅读(310) 评论(0)

Java集合--ArrayBlockingQueue

ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源的线程需要阻塞等待;而且,ArrayBlockingQu...
阅读(222) 评论(0)

Java集合--CopyOnWriteArraySet

它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过“散列表(HashMap)”实现的,而CopyOnWriteArraySet则是通过“动态数组(CopyOnWriteArrayList)”实现的,并不是散列表。和CopyOnWriteArray...
阅读(222) 评论(0)

Java集合--CopyOnWriteArrayList

CopyOnWriteArrayList相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和ArrayList不同的时,它具有以下特性:1. 它最适合于具有以下特征的应用程序:List 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。2. 它是线程安全的。3. 因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remo...
阅读(149) 评论(0)

Spring源码学习--Bean的生命周期

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。一、生命周期流程图:  Spring Bean...
阅读(280) 评论(0)

Spring源码学习--Spring事物

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用hibernate进行数据访问时,DataSource实际为SessionFactory,Transacti...
阅读(167) 评论(0)

Spring Aop源码学习--JoinPoint连接点

JoinPoint连接点:程序执行过程中明确的点,简单的来说就是Java程序执行过程中的方法。JoinPoint接口图:JoinPoint通过抽象实现成为一个个的Method,在执行每个JoinPoint所代表的Method中,会执行对应的Advice(参考博客Spring Aop源码学习--Advice通知)。JoinPoint接口提供的方法public interface Joinpoint ...
阅读(80) 评论(0)

Spring Aop源码学习--Advice通知

Advice通知,所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类(1)BeforeAdvice、AfterAdvice:SpringAOP自定义的通知,用于拦截的方法之前或者之后,继承了AOP联盟的通知接口Advice。 (2)MethodBeforeAdvice、AfterReturningAdvice:仍然是SpringAOP自己的接口设计 Met...
阅读(282) 评论(0)

Spring Aop源码学习--Advisor切面

Advisor接口及其实现类是Advice(通知)和PointCut(切入点)的一个组合体,按照aop的定义其就是一个Aspect切面。Advisor及其实现类:在接口Advisor中定义了获取Advice通知的方法public interface Advisor { //获取通知 Advice getAdvice(); boolean isPerInstance(); }在Point...
阅读(212) 评论(0)

Spring Aop源码学习--PointCut切入点

PointCut切入点简单来说就是用来指明Advice(增强)所作用的地方(一般指方法),PointCut简单来说是一个基于表达式的拦截条件。PointCut接口及实现类:PointCut接口提供了两个接口分别对类和方法进行匹配过滤,如果类及方法匹配成功则Advice就可以作用在方法上。public interface Pointcut { /** * Return the ClassFi...
阅读(199) 评论(0)

Spring Aop源码学习--Aop代理AopProxy

AopProxy是Spring Aop提供的代理类,简单来说通过其实现类可以获取到代理类。AopProxy接口提供的方法如下:public interface AopProxy { /** * Create a new proxy object. * Uses the AopProxy's default class loader (if necessary for proxy cre...
阅读(241) 评论(0)

Spring Aop源码学习--Aop代理工厂AopProxyFactory

Spring AOP提供了Aop代理类的工厂类AopProxyFactory,其作用就是创建AopProxy类。//Aop工厂,创建AOP public interface AopProxyFactory { //创建AOP AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException; } AopProx...
阅读(190) 评论(0)

Java--Proxy代理介绍及实现机制

Proxy,也就是“代理”了。意思就是,你不用去做,别人代替你去处理。比如说:赚钱方面,我就是我老婆的 Proxy;带小孩方面,我老婆就是我的 Proxy;家务事方面,没有 Proxy。 它在程序开发中起到了非常重要的作用,比如传说中的 AOP(面向切面编程),就是针对代理的一种应用。此外,在设计模式中,还有一个“代理模式”。在公司里要上外网,要在浏览器里设置一个 HTTP 代理。wocao,代理...
阅读(75) 评论(0)

Java集合--JDK 1.8 ConcurrentHashMap 源码剖析

第一篇:前言HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%。final HashMap map = new HashMap(2);  for (int i = 0; i 10000; i++) {      new Thread(new Runnable() {          @O...
阅读(246) 评论(0)

Java集合之ConcurrentHashMap实现原理

ConcurrentHashMap是Java1.5中引用的一个线程安全的支持高并发的HashMap集合类。这篇文章总结了ConcurrentHashMap的内部实现原理,是对于自己理解后的一些整理。1.HashTable与ConcurrentHashMap的对比HashTable本身是线程安全的,写过Java程序的都知道通过加Synchronized关键字实现线程安全,这样对整张表加锁实现同步的一...
阅读(169) 评论(0)

Spring源码学习--Bean对象循环依赖问题解决(四)

循环依赖就是N个类相互嵌套引用,如果通过new对象的方式产生循环依赖的话会导致程序内存溢出报错,接下来我们了解一下spring是如何解决循环依赖问题。第一种:prototype原型bean循环依赖对于原型bean的初始化过程中不论是通过构造器参数循环依赖还是通过setXxx方法产生循环依赖,Spring都会直接报错处理。AbstractBeanFactory.doGetBean()方法:if (i...
阅读(95) 评论(0)

HashMap和有序LinkedHashMap实现对比

LinkedHashMap:LinkedHashMap简单来说是一个有序的HashMap,其是HashMap的子类,HashMap是无序的。接下来我们通过对比分析HashMap和LinkedHashMap来了解一下LinkedHashMap是如何实现有序的。首先HashMap及子类LinkedHashMap都提供了一个数组。 Node[] table  不同key的hash值是分布在这个数组中的...
阅读(198) 评论(0)

Spring源码学习--Bean对象变量初始化(三)

在上一篇博客 Spring源码学习--Bean对象初始化(二)中我们介绍了Bean对象的初始化过程,接下来我们介绍一下对初始化后的Bean的变量值初始化的操作流程。       对于Spring对属性值注入的方式,即使我们没有看Spring的实现方式可能也会猜到,对于通过set方法注入的变量值简单来说调用类的xx.xx.setXx(args ..)就完成了变量值的注入操作,对于通过注解@Autow...
阅读(325) 评论(0)
312条 共16页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:302228次
    • 积分:6080
    • 等级:
    • 排名:第3948名
    • 原创:300篇
    • 转载:12篇
    • 译文:0篇
    • 评论:73条
    Github
    访问:https://github.com/IAMTJW
    博客专栏
    最新评论