JAVA多线程:线程池
1. 引言
前面的文章中,利用线程以及通过对Runnable接口的实现来执行指定的任务,例如:
public taskTest{
public static void main(String[] args){
Runnable task=new TaskClass();
Thread tread1=new Thread(task);
thread1.start();
}
}
按照上述代码执行任务,对于单一任务是方便并且直观的。但是由于必须为每个任务创建一个线程,当我们面对大量的任务需要执行时,这种执行任务的方式是不高效的。Java提供Executor接口来执行线程池中的任务,提供ExecutorService接口来管理和控制任务。
2. 线程池
ExecutorService接口是Executor的子接口,可以通过调用Executors类中的静态方法来创建Executor对象,例如newFixedThreadPool和newCachedThreadPool可以用来创建线程池;excute方法用于执行线程,下面的表格将给出具体的方法和功能。
- java.util.concurrent.Executor
方法 | 功能 |
---|---|
void execute(Runnable object) | 执行准备的任务线程 |
- java.util.concurrent.ExecutorService
方法 | 功能 |
---|---|
void shutdown() | 关闭执行器,但允许完成执行其中的任务 |
List shutdownNow() | 立即关闭执行器,并返回尚未完成任务的清单 |
boolean isShutdown() | 如果执行器已经关闭则返回true |
boolean isTerminated() | 如果线程池中的所有任务都被终止则返回true |
- java.util.concurrent.Executors
方法 | 功能 |
---|---|
ExecutorService newFixedThreadPool(int numberOfthreads) | 创建线程池,并具有固定的线程数量 |
ExecutorService newCachedThreadPool() | 创建线程池,按需创建新线程 |
下面给出创建线程池的示范:
import jav.util.concurrent.*;
public class executorTest{
public static void main(String[] args){
ExecutorService executor=Executors.newFixedThreadPool(2);//创建线程池
/*执行线程*/
executor.execute(new printChar('a',100));
executor.execute(new printChar('b',100));
executor.shutdown();
}
}
/*任务类*/
class printChar implements Runnable{
char c;
int num;
public printChar(char c, int num){
this.c=c;
this.num=num;
}
public void run(){
for(int i=0;i<num;i++)
System.out.println(c);
}
}