定长线程池
1.newFixedThreadPool
public class OneMoreStudy {
public static void main(String[] args) {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4);
for (int i = 0; i < 1000; i++) {
final int index = i;
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
SimpleDateFormat sdf = new SimpleDateFormat(
"HH:mm:ss");
System.out.println("运行时间: " +
sdf.format(new Date()) + " " + index);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
fixedThreadPool.shutdown();
}
}
线程池与多线程的区别
1.线程池中的线程执行完之后不会回收线程,会继续将线程放在等待队列中;多线程程序在每次任务完成之后会回收该线程。
2.线程池是在程序运行开始,创建好的多个线程,并且这多个线程挂起等待任务的到来。而多线程是在任务到来得时候进行创建,然后执行任务。
3.由于线程池中线程是创建好的,所以在效率上相对于多线程会高很多。
线程池回收
通过设置线程的最大空闲时间,超出这个时间将进行回收