您的位置:首页 > 其它

线程池ExecutorService

2017-02-20 18:11 183 查看
             线程池:  任务提交到线程池,而不是直接交给某线程,线程池拿到任务后,它在内部找空闲的线程进行执行(封装),任务是提交给线程池,一个线程只能执行一个任务,但可以同时向一个线程池提交多个任务。

               创建固定大小的线程池

               创建缓存线程池

               如何实现线程死掉后重新启动?

               答案:创建单一线程池Executors.newSingleThreadExecutor();

            关闭线程池

                      shutdown()  线程池中都处于空闲是结束线程池

                       shutdownNow()线程池不管是否有任务在执行都停止

例子:

//线程池

public class ThreadPool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
Runnable command = new Runnable() {

@Override
public void run() {
System.out.println("1"+Thread.currentThread().getName());
          try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.shutdown();
}

}

输出:

1pool-1-thread-1

1pool-1-thread-1

1pool-1-thread-1

1pool-1-thread-1

1pool-1-thread-1

都是一个线程在执行这些任务;在3s执行下一个

----------------------------------------------------------------------

线程池启动定时器

  调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取消任务。

  支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。

   Executors.newSchdeduledThreadPool(3).schedule  (....)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: