线程池的做用:javascript
线程池做用就是限制系统中执行线程的数量。
根据系统的环境状况,能够自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了形成系统拥挤效率不高。用线程池控制线程数量,其余线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务须要运行时,若是线程池中有等待的工做线程,就能够开始运行了;不然进入等待队列。java
为何要用线程池:web
- 减小了建立和销毁线程的次数,每一个工做线程均可以被重复利用,可执行多个任务
- 能够根据系统的承受能力,调整线程池中工做线线程的数目,防止由于由于消耗过多的内存,而把服务器累趴下(每一个线程须要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)
线程池类服务器
2.测试类app
- package com.tdt.test;
-
- import com.tdt.impl.ls.ThreadPool;
-
- public class ThreadPoolTest {
-
- public static void main(String[] args) throws InterruptedException {
- ThreadPool threadPool = new ThreadPool(3);
- Thread.sleep(500);
-
- for (int i = 0; i <=5 ; i++) {
- threadPool.execute(createTask(i));
- }
- threadPool.waitFinish();
- threadPool.closePool();
-
- }
-
- private static Runnable createTask(final int taskID) {
- return new Runnable() {
- public void run() {
-
- System.out.println("Hello world");
-
- }
- };
- }
- }
结果:测试
- 工做线程0等待任务...
- 工做线程1等待任务...
- 工做线程2等待任务...
-
- 工做线程0开始执行任务...
- Hello world
- 工做线程0等待任务...
-
- 工做线程1开始执行任务...
- Hello world
- 工做线程1等待任务...
-
- 工做线程2开始执行任务...
- Hello world
- 工做线程2等待任务...
-
- 工做线程0开始执行任务...
- Hello world
- 工做线程0等待任务...
-
- 工做线程1开始执行任务...
- Hello world
- 工做线程1等待任务...
-
- 工做线程2开始执行任务...
- Hello world
- 工做线程2等待任务...
此上适用于jdk1.4版本。转自 http://sunnylocus.iteye.com/blog/223327#commentsthis