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("停止线程池了!"); }
时间: 2024-12-31 09:24:39