线程池ExecutorService

来源:互联网 发布:linux 启动service 编辑:程序博客网 时间:2024/06/01 10:27

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

               创建固定大小的线程池

               创建缓存线程池

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

               答案:创建单一线程池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  (....)

 

0 0