线程池的优点:
1、减少创建和销毁线程的次数,每个线程可以重复使用,可以执行多个任务
2、可以降低系统资源的占用率
线程池其实就是将许多线程通过队列组合起来,每当有任务时,就会从队列中取出线程,让其工作。
ThreadPool类
public class ThreadPool {
private int temp;
private ThreadWork []tw;
//保存任务的对象
private LinkedList<Runnable> list=new LinkedList<Runnable>();
/**
* 构造函数,初始化线程池中的线程
* @param temp 线程池中的线程数
*/
public ThreadPool(int temp){
this.temp=temp;
tw=new ThreadWork[temp];
//创建工作线程对象
for(int i=0;i<temp;i++){
ThreadWork work=new ThreadWork();
tw[i]=work;
tw[i].setName(i+"号线程");
//调用start方法,会启动ThreadWork的run方法
tw[i].start();
}
}
//执行任务的方法
public void execute(Runnable task){
synchronized(list){
//将任务添加到任务队列里
list.add(task);
list.notify();
}
}
/**
* 工作线程类
*/
private class ThreadWork extends Thread{
public void run(){
Runnable r;
while(true){
synchronized (list) {
//如果任务队列为空,就等待
if(list.isEmpty()){
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
r=list.removeFirst();//移除队列中第一个线程
}
r.run();
}
}
}
有任务时,就去调用execute()方法,系统就会分配一个线程去处理;这个就是自定义线程池。