首页 > 代码库 > 使用ExecutorService实现线程池

使用ExecutorService实现线程池

ExecutorService是java提供的用于管理线程池的类。

线程池的作用:

  - 控制线程数量

  - 重用线程

  当一个程序中创建了许多线程,并在任务结束后销毁,会给系统带来过度消耗资源,以及过度切换线程的危险,从而可能导致系统崩溃。为此我们应使用线程池来解决这个问题。

线程池的概念:

  首先创建一些线程,它们的集合称为线程池,当服务器受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程,而是将该线程还回到线程池中。

  在线程池编程模式下,任务是提交给整个线程池,而不是交给某个线程,线程池拿到任务就在内部找空闲的线程,再把任务交给内部的空闲线程,一个线程只能执行一个任务,但可以向线程池提交多个任务。

线程池的主要实现方法:

  - Executors.newCachedThreadPool()

  创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们

  - Executors.newFixedThreadPool(int nThreads)

  创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程。

  下面以一段代码演示线程池的使用: 

public static void main(String[] args) {
     ExecutorService threadpoo1 = Executors.newFixedThreadPool(2);
     for(int i=0;i<5;i++){
        Runnable runn=new Runnable() {
             public void run() {
                Thread t=Thread.currentThread();
                    try {
                         System.out.println(t+":正在运行");
                         Thread.sleep(5000);
                         System.out.println(t+"运行结束");
                } catch (Exception e) {
                     System.out.println("线程被中断了");
                }
             }
       };
    threadpoo1.execute(runn);
    System.out.println("指派了一个任务交给线程池");
    threadpoo1.shutdown();
    System.out.println("停止线程池了!");
}
        
           

 

使用ExecutorService实现线程池