线程池
系统启动一个新的线程的成本是很高的,因为涉及到与操作系统的交互,在这种情况下,使用线程池很好的提高性能,尤其是程序中需要很多生存期很短的线程,更加应该考虑使用线程池
与数据库连接池相同的是,线程池在程序启动的时候就创建了大量的空闲线程,程序将一个Runnable对象传递给线程池,线程池就会启动一条线程执行该对象的Run方法,当润方法执行结束以后,该线程不会死亡,而是再次返回线程池成为空暇线程,继续等待下一个Runnable对象的run方法.
JDK1.5以后提供了ExecutorService对象来代表线程池
Executor 工厂产生线程池,该工厂通过几个静态方法产生线程池:
newCacheThreadPool:创建一个具有缓存功能的线程池,创建的线程将会被缓存到线程池中
newFixedThreadPool:创建可以重用的可以,具有固定线程数的线程池
newSingleThreadExecutor:创建单线程的线程池
newScheduledExecutor:固定数量,可以在指定延迟后执行任务
newSingleScheduledExecutor:创建单线程的线程池,可以在制定延迟后执行任务
package org.thread.threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 线程池
*
* */
public class ThreadPoolTest {
public static void main(String[] args) {
//池中10个线程
ExecutorService executorService = Executors.newFixedThreadPool(10);
//创建Runnable对象
ThreadTRunnable threadTRunnable = new ThreadTRunnable();
//将Runnable实例给线程池,底层进行线程包装,直接放在池子中,会立马通知cpu进行执行,池子不会结束
executorService.submit(threadTRunnable);
executorService.submit(threadTRunnable);
executorService.submit(threadTRunnable);
executorService.submit(threadTRunnable);
}
}
package org.thread.threadpool;
public class ThreadTRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName());
}
}
}