并发集合CopyOnWriteArrayList、BlockingQueue、SkipList
摘要:一、高效读取:CopyOnWriteArrayList 个人总结:适用于读多写少场景。另外读写操作未加锁,可能会读取一些修改未完成的脏数据,只能保证最终一致性,不能满足实时性要求:线程并发读读不加锁,读写不加锁,写写时copy份原数组,在副本里修改,修改完后再将副本数据替换回原数据。 在很多应用场景
阅读全文
线程池详解
摘要:1、http://ifeve.com/java-threadpool/ 2、线程池的使用:ThreadPoolExecutor(继承Executors和ExecutorService) 我们可以通过ThreadPoolExecutor来创建一个线程池。 public ThreadPoolExecut
阅读全文
捕获线程异常
摘要:一、设置线程异常回调接口 在线程的run 方法中,如果有受检异常必须进行捕获处理,如果想要获得run() 方法中出现的运行时异常信息, 可以通过回调UncaughtExceptionHandler 接口获得哪个线程出现了运行时异常.在Thread 类中有关处理运行异常的方法有: getDefault
阅读全文
ReadWriteLock读写锁
摘要:一、简介 ReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有效地帮助减少锁竞争,以提升系统性能。用锁分离的机制来提升性能非常容易理解,比如线程A1、A2、A3进行写操作,B1、B2、B3进行读操作,如果使用重入锁或者内部锁,则理论上说所有读之间、读与写之间、写和写之间都是串行操
阅读全文
线程间通信(wait和notify)
摘要:一、等待通知机制 在单线程编程中,要执行的操作需要满足一定的条件才能执行,可以把这个操作放在if 语句块中. 在多线程编程中,可能A 线程的条件没有满足只是暂时的, 稍后其他的线程B 可能会更新条件使得A 线程的条件得到满足. 可以将A 线程暂停,直到它的条件得到满足后再将A 线程唤醒.它的伪代码:
阅读全文
线程同步CAS
摘要:一、CAS简介 CAS(Compare And Swap)是由硬件实现的.CAS 可以将read- modify - write 这类的操作转换为原子操作.i++自增操作包括三个子操作: 从主内存读取i 变量值 对i 的值加1 再把加1 之后的值保存到主内存 CAS 原理: 在把数据更新到主内存时,
阅读全文
增强的Future:CompletableFuture
摘要:一、简介 CompletableFuture是Java 8新增的一个超大型工具类。一方面,它实现了Future接口,而更重要的是,它也实现了CompletionStage接口。CompletionStage接口也是在Java 8中新增的。而CompletionStage接口拥有多达约40种方法,这个
阅读全文
信号量(Semaphore)
摘要:一、信号量(Semaphore) 信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的扩展。无论是内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量却可以指定多个线程,同时访问某一个资源。信号量主要提供了以下构造函数: pu
阅读全文
synchronized功能扩展:重入锁
摘要:一、重入锁ReentrantLock简介 重入锁可以完全替代synchronized关键字。在JDK 5.0的早期版本中,重入锁的性能远远好于synchronized,但从JDK 6.0开始,JDK在synchronized上做了大量的优化,使得两者的性能差距并不大。 重入锁使用java.util.
阅读全文
线程池
摘要:一、Executor线程池工具类 Executor框架提供了各种类型的线程池,主要有以下工厂方法: public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newSing
阅读全文
CountDownLatch倒计时器和循环栅栏CyclicBarrier
摘要:CountDownLatch 一、作用 用于主线程等待多个次线程执行完后再执行。比如API接口要求响应时间在200ms以内,但是如果一个接口内部依赖多个三方/外部服务,那串行调用接口的RT必然很久,所以个人用的最多的是接口RT优化场景,内部服务并行调用。 二、常用方法: CountDownLatch
阅读全文