关闭

ExecutorService——shutdown方法和awaitTermination方法

标签: 线程池shutdown
10685人阅读 评论(0) 收藏 举报
分类:

ExecutorService的关闭

shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。

方法简介

  1. shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且等待已经提交的任务(包含提交正在执行和提交未执行)执行完成。当所有提交任务执行完毕,线程池即被关闭。

  2. awaitTermination方法:接收人timeout和TimeUnit两个参数,用于设定超时时间及单位。当等待超过设定时间时,会监测ExecutorService是否已经关闭,若关闭则返回true,否则返回false。一般情况下会和shutdown方法组合使用。

具体实例

普通任务处理类:

package com.secbro.test.thread;

import java.util.concurrent.Callable;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/6/1.
 */
public class Task implements Callable{
    @Override
    public Object call() throws Exception {
        System.out.println("普通任务");
        return null;
    }
}

长时间任务处理类:

package com.secbro.test.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/6/1.
 */
public class LongTask implements Callable{
    @Override
    public Object call() throws Exception {
        System.out.println("长时间任务");
        TimeUnit.SECONDS.sleep(5);
        return null;
    }
}

测试类:

package com.secbro.test.thread;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/6/1.
 */
public class TestShutDown {

    public static void main(String[] args) throws InterruptedException{
        ScheduledExecutorService service = Executors.newScheduledThreadPool(4);

        service.submit(new Task());
        service.submit(new Task());
        service.submit(new LongTask());
        service.submit(new Task());


        service.shutdown();

        while (!service.awaitTermination(1, TimeUnit.SECONDS)) {
            System.out.println("线程池没有关闭");
        }

        System.out.println("线程池已经关闭");
    }

}

输出结果为:

普通任务
普通任务
长时间任务
普通任务
线程池没有关闭
线程池没有关闭
线程池没有关闭
线程池没有关闭
线程池已经关闭
3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

多线程awaitTermination和shutdown的使用问题

最近做一个抓取网页的任务,由于需要抓取的数据量比较大,并且抓取的间隔比较短,每次抓取任务启动后会有多次网络请求,为了提高抓取的效率采用了多线程的方式实现:    初始时采用了上图的实现方式,其中C...
  • pengbaoxing
  • pengbaoxing
  • 2014-12-18 16:03
  • 6991

awaitTermination() shutdown()

newFixedThreadPool 创建一个固定大小的线程池。 shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭。 awaitTermination():用于等待子线程...
  • jiafu1115
  • jiafu1115
  • 2012-07-06 10:13
  • 23750

threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别

最近在看并发编程,在使用到ThreadPoolExecutor时,对它的三个关闭方法(shutdown()、shutdownNow()、awaitTermination())产生了兴趣,同时又感到迷惑...
  • u012168222
  • u012168222
  • 2016-10-11 18:10
  • 3679

awaitTermination() shutdown()

创建一个固定大小的线程池。 shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭。 awaitTermination():用于等待子线程结束,再继续执行下面的代码。该例...
  • u011461913
  • u011461913
  • 2015-08-20 21:13
  • 1061

Spark流编程指引(三)-------------------------------------初始化StreamingContext

基本概念 接下来,我们在上一节例子的基础上,来阐述Spark Streaming的基本知识。 链接 和Spark类似,Spark Streaming也包含在maven的中央仓库中。为了写...
  • happyAnger6
  • happyAnger6
  • 2015-06-28 21:50
  • 5681

线程服务ExecutorService的操作shutdown方法和shutdownNow方法

1、shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。 2、在终止时,执行程序没有任务在执行,也没有任务在等待...
  • u010886101
  • u010886101
  • 2016-12-21 14:51
  • 1097

ScheduledExecutorService类 scheduleWithFixedDelay() 和 scheduleFixedRate() 区别

先说scheduleWithFixedDelay(), scheduleWithFixedDelay从字面意义上可以理解为就是以固定延迟(时间)来执行线程任务,它实际上是不管线程任务的执行时间的,每...
  • Butingnal
  • Butingnal
  • 2013-10-16 10:53
  • 19611

ExecutorService生命周期

转自http://victorzhzh.iteye.com/blog/1010359 ExecutorService接口继承了Executor接口,定义了一些生命周期的方法 Java代...
  • sayyanfu
  • sayyanfu
  • 2013-02-06 15:18
  • 14994

java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)

一、java ExecutorService实现 创建ExecutorService变量 private ExecutorService executor = null       ...
  • kai763253075
  • kai763253075
  • 2016-11-04 13:28
  • 5430

Executor并发性能对比

package concurrencyTest; import java.util.ArrayList; import java.util.List; import java.util.concurr...
  • cloudeagle_bupt
  • cloudeagle_bupt
  • 2016-09-21 21:47
  • 800
    个人资料
    • 访问:924433次
    • 积分:10570
    • 等级:
    • 排名:第1852名
    • 原创:211篇
    • 转载:26篇
    • 译文:8篇
    • 评论:316条
    Drools 7 视频教程
    个人微信公众号

    欢迎关注微信公众号,了解更多新动态
    这里写图片描述

    更多实战经验,请加入区块链技术小密圈
    这里写图片描述
    Drools规则引擎QQ交流群
    这里写图片描述
    以太坊研发技术交流群
    这里写图片描述
    博客专栏
    最新评论