Java线程池
Java通过实现java.lang.Runnable来定义任务类,并创建线程:
Runnable task=new TaskClass(task);
new Thread(task).start();
然而,为每个任务开始一个新线程可能会限制流量并且造成性能降低。
线程池是管理并发执行任务个数的理想方法。
Java’提供Executor接口来执行线程池中的任务,提供ExecutorService接口来管理和控制任务。
java.util.concurrent.Executor
+execute(Runnable object):void
java.util.concurrent.ExecutorService implements Executor
+shutdown():void
Executors类提供创建Executor对象的静态方法。
java.util.concurrent.Executors
+newFixedThreadPool(numberOfThreads:int):ExecutorService
+newCachedThreadPool():ExecutorService
若需要为一个任务创建一个线程使用Thread类,若需要为多个任务创建线程,最好用线程池。
package concurrence;
import java.util.concurrent.*;
public class ExecutorDemo {
public static void main(String[] args){
ExecutorService executor=Executors.newFixedThreadPool(3);
executor.execute(new PrintChar('a',10000));
executor.execute(new PrintChar('b',10000));
executor.execute(new PrintNum(100));
executor.shutdown();
}
}
任务类实现:
class PrintChar implements Runnable{
private char charToPrint;
private int times;
public PrintChar(char c,int t){
charToPrint=c;
times=t;
}
public void run(){
for(int i=0;i<times;i++){
System.out.print(charToPrint);
}
}
}
class PrintNum implements Runnable{
private int lastNum;
public PrintNum(int l){
lastNum=l;
}
public void run(){
for(int i=1;i<lastNum;i++){
System.out.print(" "+i);
}
}
}