摘要: 线程池的优点 1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。 2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。 线程池的创建 corePoolSize:线程池核心线程数量 maximumPoolSize:线程池最大 阅读全文
posted @ 2016-11-04 17:46 冬瓜蔡 阅读(96260) 评论(2) 推荐(14) 编辑
摘要: 在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch、CyclicBarrier、Semaphore。 一、CountDownLatch 执行结果: 这里会存在两种结果:123或者213,但是绝对不会出现3打印在1、2前面的。 这个Cou 阅读全文
posted @ 2016-11-02 16:40 冬瓜蔡 阅读(1096) 评论(0) 推荐(0) 编辑
摘要: 一、背景 虽然目前处理器核心数已经发展到很大数目,但是按任务并发处理并不能完全充分的利用处理器资源,因为一般的应用程序没有那么多的并发处理任务。基于这种现状,考虑把一个任务拆分成多个单元,每个单元分别得到执行,最后合并每个单元的结果。 Fork/Join框架是JAVA7提供的一个用于并行执行任务的框 阅读全文
posted @ 2016-11-02 11:11 冬瓜蔡 阅读(9776) 评论(1) 推荐(1) 编辑
摘要: CAS:Compare and Swap 比较并交换 java.util.concurrent包完全建立在CAS之上的,没有CAS就没有并发包。并发包借助了CAS无锁算法实现了区别于synchronized同步锁的乐观锁。因为对于CAS算法来说,就是在不加锁的前提下而假设没有冲突去完成某个操作,如果 阅读全文
posted @ 2016-10-27 14:55 冬瓜蔡 阅读(4220) 评论(0) 推荐(1) 编辑
摘要: 一、读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA的并发 阅读全文
posted @ 2016-10-26 15:23 冬瓜蔡 阅读(1196) 评论(0) 推荐(0) 编辑
摘要: 简介 ReentrantLock(重入锁)就是支持可重进入的锁,它表示该锁能支持一个线程对资源的重复加锁。另外还支持获取锁的公平和非公平选择ReentrantLock的实现不仅可以替代隐式的synchronized关键字,而且还能够提供超过关键字本身的多种功能。 公平与非公平 这个概念是针对锁的获取 阅读全文
posted @ 2016-10-24 16:17 冬瓜蔡 阅读(2123) 评论(0) 推荐(0) 编辑
摘要: 队列同步器介绍 队列同步器AbstractQueuedSynchronizer,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。 同步器的主要使用方式是继承,一般作为同步器组件的静态内部类,在同步器中仅定义了与状态相 阅读全文
posted @ 2016-10-24 11:04 冬瓜蔡 阅读(2612) 评论(0) 推荐(0) 编辑
摘要: 一、简介 模板方法模式是类的行为模式,需要开发抽象类和具体子类的工程师之间的合作。一个工程师负责给出一个算法的轮廓和骨架,另一个工程师负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称为基本方法,而将这些基本方法汇总起来的方法叫做模板方法。 二、设计思想 模板模式通常会设计一个抽象类,内部 阅读全文
posted @ 2016-10-21 16:38 冬瓜蔡 阅读(387) 评论(0) 推荐(0) 编辑
摘要: 并发编程中synchronized一直是元老级角色,我们称之为重量级锁。主要用在三个地方: 1、修饰普通方法,锁是当前实例对象。 2、修饰类方法,锁是当前类的Class对象。 3、修饰代码块,锁是synchronized括号里面的对象。 一、synchronized实现原理 当一个线程试图访问同步代 阅读全文
posted @ 2016-10-21 09:33 冬瓜蔡 阅读(930) 评论(0) 推荐(0) 编辑
摘要: 一、线程状态 由于参考的维度不一样,线程状态划分也不一样,我这里简单的分为5大类,并且会说明状态变迁的详细过程: 1、新建(new):新创建了一个线程,但是并未执行start方法。 2、就绪(runnable):执行start方法后,该线程位于可运行的线程池中,等待被CPU选中执行。 3、运行(ru 阅读全文
posted @ 2016-10-20 10:46 冬瓜蔡 阅读(531) 评论(0) 推荐(0) 编辑