-
JCIP-22-Executor 框架, ExecutorService, AbstractExecutorService
Q
是什么
为什么需要
有什么优缺点
如何使用
整个技术体系
为什么这么设计?如果是我,我怎么设计?
为什么需要 Executor
new Thread() 的缺点
每次new Thread()耗费性能
调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。
...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-21-thread stop 线程关闭
想要启动线程的话,只需调用 Thread类 的start()方法,并在run()方法中定义需要执行的内容即可,灰常滴简单,但如何优雅地停止线程呢?就值得好好思考玩味了。
1. 为什么需要停止线程
通常情况下我们是不会去手动去停止的,而是等待线程自然运行至结束停止,但是在我们实际开发中,会有很多情况中我们是需要提前去手动来停止线程,比如程序中出现异常错误,比如使用者关闭程序等情况中。
在...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-21-thread pool 手写线程池
手写线程池
本文描述了线程池的核心类。
从原理理解线程池
线程池的作用
降低资源消耗。
通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度。
当任务到达时,任务可以不需要的等到线程创建就能立即执行。
提高线程的可管理性。
线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-21-thread pool shutdown 如何优雅的关闭线程池
背景
前几天在和同事聊一个需求,说是有个数据查询的功能,因为涉及到多个第三方接口调用,想用线程池并行来做。
很正常的一个方案,但是上线后发现,每次服务发布的时候,这个数据查询的功能就会挂掉,后来发现是线程池没有做好关闭,这里总结一下。
关键字:线程池、shutdown、shutdownNow、interrupt
一、线程中断 interrupt
先补一补基础的知识:线程中断。
线...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-20-thread 源码
Thread
示例
一、继承Thread类创建线程类
(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
(2)创建Thread子类的实例,即创建了线程对象。
(3)调用线程对象的start()方法来启动该线程。
public class FirstThreadTest extends Threa...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-19-闭锁(如CountDownLatch),栅栏(如CyclicBarrier),信号量(如Semaphore)和阻塞队列(如LinkedBlockingQueue)
同步工具类
同步工具类主要包括闭锁(如CountDownLatch),栅栏(如CyclicBarrier),信号量(如Semaphore)和阻塞队列(如LinkedBlockingQueue)等;
FutureTask/Future 也可以达到同样的目的。
使用同步工具类可以协调线程的控制流;
同步工具类封装了一些状态,这些状态决定线程是继续执行还是等待,此外同步工具类还提供了修改状...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-18-thread InterruptedException 中断异常处理及中断机制
java 中断机制
要知道如何处理,首先要知道 java 的中断机制。
引言
如果对 Java 中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。
中断机制是如何工作的?捕获或检测到中断后,是抛出 InterruptedException 还是重设中断状态以及在方法中吞掉中断状态会有什么后果?
Thread.stop 与中断相比又有哪些异同?
什么情...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-17-双端队列之 ConcurrentLinkedDeque
问题
ConcurrentLinkedDeque 是什么?
优缺点?
应用场景?
源码实现?
个人启发?
引言
在并发编程中我们有时候需要使用线程安全的队列。
如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。
使用阻塞算法的队列可以用一个...
2019-01-18 03:21:15 |
Concurrency