为什么阿里巴巴要禁用 Executors 创建线程池?

写在前面通过阅读本篇文章你将了解到: 线程池的定义 Executors创建线程池的几种方式 ThreadPoolExecutor对象 线程池执行任务逻辑和线程池参数的关系 Executors创建返回ThreadPoolExecutor对象 OOM异常测试 如何定义线程池参数 线程池的定义管理一组工作线程。通过线程池复用线程有以下几点优点: 减少资源创建 => 减少内存开销,创建线程占用...

Java-并发编程——CyclicBarrier

一、简介CyclicBarrier 是一个同步工具类,它允许一组线程在到达某个栅栏点(common barrier point)互相等待,发生阻塞,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行.它非常适用于一组线程之间必需经常互相等待的情况。CyclicBarrier 字面理解是循环的栅栏,之所以称之为循环的是因为在等待线程释放后,该栅栏还可以复用。 建议阅读 Cyc...

Java 并发编程——LinkedBlockingQueue

在集合框架里,ArrayList 和 LinkedList 是使用最多的两种集合。ArrayList 和 ArrayBlockingQueue 一样,内部基于数组来存放元素,而 LinkedBlockingQueue 则和 LinkedList 一样,内部基于链表来存放元素。 LinkedBlockingQueue 实现了 BlockingQueue 接口,不同于 ArrayBlockingQue...

Java 并发编程——ArrayBlockingQueue

一、简介ArrayBlockingQueue 顾名思义:基于数组的阻塞队列。数组是要指定长度的,所以使用 ArrayBlockingQueue 时必须指定长度,也就是它是一个有界队列。它实现了 BlockingQueue 接口,有着队列、集合以及阻塞队列的所有方法。 ArrayBlockingQueue 是线程安全的,内部使用 ReentrantLock 来保证。ArrayBlockingQue...

Java 并发编程——CountdownLatch

一、前言今天来介绍下 concurrent 包下的一个工具类——CountDownLatch,这算是一个比较实用的工具类,在我们日常开发中使用的比较多,而且 API 也很简单,总结记录下。 注:本文的源码浅析章节参考文章:《CountDownLatch详解》 二、基本使用CountdownLatch 的主要功能是允许一个或多个线程等待直到在其他线程中一组操作执行完成,用人话说就是多个线程分别执...

Java 并发编程——ReentrantLock

一、简介ReentrantLock 是一个可重入且独占式的锁,相较于传统的 Synchronized,它增加了轮询、超时、中断等高级功能。其类图如下: ReentrantLock 是 java.util.concurrent(J.U.C)包中的锁,相比于 synchronized,它多了以下高级功能: 1. 等待可中断 当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其...

Java 并发编程——Thread 类的使用

在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。 一、线程的状态线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 当需要新起一个线程来执行某个子任务...

Java 并发编程——volatile 关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一...

Java 并发编程——线程池的使用

本文基于 JDK 1.6,在高版本 JDK 中源码有所出入。 一、Java中的 ThreadPoolExecutor类java.uitl.concurrent.ThreadPoolExecutor 类是线程池中最核心的一个类,因此如果要透彻地了解 Java 的线程池,必须先了解这个类。下面我们来看一下 ThreadPoolExecutor 类的具体实现源码。 在 ThreadPoolExecu...
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×