文章来源:http://blog.sina.com.cn/s/blog_6560efc9010185el.html
自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的对象池等等,池的最终目的都是节约资源,以更小的开销做更多的事情,从而提高性能。
- ExecutorService
threadPool = Executors.newFixedThreadPool(3);// 创建可以容纳3个线程的线程池
- ExecutorService
threadPool = Executors.newCachedThreadPool();// 线程池的大小会根据执行的任务数动态分配
- ExecutorService
threadPool = Executors.newSingleThreadExecutor();// 创建单个线程的线程池,如果当前线程在执行任务时突然中断,则会创建一个新的线程替代它继续执行任务
- ScheduledExecutorService
threadPool = Executors.newScheduledThreadPool(3);// 效果类似于Timer定时器
- import
java.util.concurrent.ExecutorService; - import
java.util.concurrent.Executors; - public
class ThreadPoolTest { -
public static void main(String[] args) { -
ExecutorService threadPool = Executors.newFixedThreadPool(3); -
for(int i = 1; i < 5; i++) { -
final int taskID = i; -
threadPool.execute(new Runnable() { -
public void run() { -
for(int i = 1; i < 5; i++) { -
try { -
Thread.sleep(20);// 为了测试出效果,让每次任务执行都需要一定时间 -
} catch (InterruptedException e) { -
e.printStackTrace(); -
} -
System.out.println("第" + taskID + "次任务的第" + i + "次执行"); -
} -
} -
}); -
} -
threadPool.shutdown();// 任务执行完毕,关闭线程池 -
} - }
- 第1次任务的第1次执行
- 第2次任务的第1次执行
- 第3次任务的第1次执行
- 第2次任务的第2次执行
- 第3次任务的第2次执行
- 第1次任务的第2次执行
- 第3次任务的第3次执行
- 第1次任务的第3次执行
- 第2次任务的第3次执行
- 第3次任务的第4次执行
- 第2次任务的第4次执行
- 第1次任务的第4次执行
- 第4次任务的第1次执行
- 第4次任务的第2次执行
- 第4次任务的第3次执行
- 第4次任务的第4次执行
- 第3次任务的第1次执行
- 第4次任务的第1次执行
- 第1次任务的第1次执行
- 第2次任务的第1次执行
- 第4次任务的第2次执行
- 第3次任务的第2次执行
- 第2次任务的第2次执行
- 第1次任务的第2次执行
- 第2次任务的第3次执行
- 第3次任务的第3次执行
- 第1次任务的第3次执行
- 第4次任务的第3次执行
- 第2次任务的第4次执行
- 第4次任务的第4次执行
- 第3次任务的第4次执行
- 第1次任务的第4次执行
- 第1次任务的第1次执行
- 第1次任务的第2次执行
- 第1次任务的第3次执行
- 第1次任务的第4次执行
- 第2次任务的第1次执行
- 第2次任务的第2次执行
- 第2次任务的第3次执行
- 第2次任务的第4次执行
- 第3次任务的第1次执行
- 第3次任务的第2次执行
- 第3次任务的第3次执行
- 第3次任务的第4次执行
- 第4次任务的第1次执行
- 第4次任务的第2次执行
- 第4次任务的第3次执行
- 第4次任务的第4次执行
- import
java.util.concurrent.ScheduledExecutorService ; - import
java.util.concurrent.TimeUnit; - public
class ThreadPoolTest { -
public static void main(String[] args) { -
ScheduledExecutorService schedulePool = Executors.newScheduledThreadPool(1); -
// 5秒后执行任务 -
schedulePool.schedule(new Runnable() { -
public void run() { -
System.out.println("爆炸"); -
} -
}, 5, TimeUnit.SECONDS); -
// 5秒后执行任务,以后每2秒执行一次 -
schedulePool.scheduleAtFixedRate(new Runnable() { -
@Override -
public void run() { -
System.out.println("爆炸"); -
} -
}, 5, 2, TimeUnit.SECONDS); -
} - }