众所周知,开启的线程会自生自灭,运行完后线程池会回收线程以便再次利用,但是总有那么一些情况需要主动停止线程。本人在网上查找了相关内容,没有找到任何答案,于是决定自己想办法解决。
先描述一下为什么会有停止线程的需求,有这样的一个业务场景:1、客户端可以在任务开启后随时关闭运行的任务,这里得用个线程持续监听客户端任务。2、程序可以重复接受任务并运行,结合场景1,如果关闭运行的任务就会抛出异常,更通俗的讲,任何异常都会导致程序挂掉,这样就无法重复接受任务运行了,于是不能用主线程跑任务,还得开一个线程来单独跑任务。3、线程开启后运行任务的过程中会遇到各种阻塞,客户端需要有响应线程才会继续执行。
介绍完以上的业务场景为什么需要主动停止线程的需求就应运而生了,因为线程会阻塞,所以会不断开启新的线程来执行任务,即使线程池数量再多也会有线程不够的情况,而且内存使用量会越来越多,最终导致内存溢出。
那么如何才能主动停止线程呢?
public class OrderStateHandler {
private static BlockingQueue queue1 = new LinkedBlockingDeque(5);
private static BlockingQueue queue2 = new LinkedBlockingDeque(5);
private static OrderListeningThreadFactory listeningThreadFactory = new OrderListeningThreadFactory("监听任务事件");
private static OrderExecu