线程池概述
█ 线程池的优点
☞ 启动一个新线程的成本是比较高的,因为它涉及到与操作系统进行交互。这种情况下使用线程池可以更好的提高性能,尤其在当前程序需要创建大量的生存周期很短的线程时,更应该考虑使用线程池。(每次都new Thread() 需要耗费系统资源和开销,利用线程池就省去了多余的创建和销毁的步骤)
█ 原理
☞ 线程池里每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一次被使用。
Java 从JDK5之后开始支持线程池
█ JDK5提供了一Executors来产生线程池,有如下方法:
public static ExecutorService newCachedThreadPool();
public static ExecutorService newFixedThreadPool(int nThreads);
public static ExecutorService newSingleThreadExecutor();
█ 以上方法返回了一个ExecutorService ,该对象表示一个线程池,它可以执行Runable对象代表的线程。它提供了如下方法:
█ submit(Runnable task);
TestMain.java | |
package com.java.threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestMain {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newCachedThreadPool();
MyTask task1=new MyTask();
threadPool.submit(task1);
//线程池会在池子里找个空闲线程执你的runable接口内的run方法。
//threadPool.shutdown(); //启动一次顺序关闭,执行以前提交的任务,但不接受新任务。注释完这局话程序不会关闭,会一直开启等待新的任务;有了这句代码,当刚才的线程执行完毕线程就会退出
}
}
class MyTask implements Runnable{
public void run(){
for(int i=0;i<=100;i++){
System.out.println("MyTask.run()"+i);
}
}
}
|
//有shutdown |