JDK1.5之后,提供了自带的线程池,以便我们更好的处理线程并发问题。
Executor类给我提供了多个线程池创建的方式:
创建固定的线程池 Executors.newFixedThreadPool(2)
创建可变的缓冲线程池 Executors.newCachedThreadPool()
创建单一的线程池 Executors.newSingleThreadExecutor()
先面试线程池的基本操作:
package andy.thread.test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * @author Zhang,Tianyou * @version 2014年11月8日 下午6:10:42 */ public class ThreadPoolTest { public static void main(String[] args) { // 创建一个固定线程数的线程池 ExecutorService threadPool = Executors.newFixedThreadPool(3); // 创建一个可根据需要创建新线程的缓冲线程池 // ExecutorService threadPool = Executors.newCachedThreadPool(); // 创建一个单一的线程池 线程死掉后将重新启动 // ExecutorService threadPool = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { final int task = i; threadPool.execute(new Runnable() { @Override public void run() { // TODO Auto-generated method stub for (int j = 0; j <= 5; j++) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " is looping of " + j + " from task " + task); } } }); } // 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。 threadPool.shutdown(); // 试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。 // threadPool.shutdownNow(); //执行线程的调度 6秒后执行 以后每2秒执行一次 Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("调度了。。"); } }, 6, 2, TimeUnit.SECONDS); } }
原文地址:http://blog.csdn.net/fengshizty/article/details/40923355