今天要做的东西需要用到多线程执行一系列的Task,查了一下网络,决定用java的Executors来做。下面是写的一段测试代码。
TestTask.java
public class TestThread implements Runnable{
private int index;
public TestThread(int num ){
index=num;
}
public void run() {
for(int i =0;i<20;i++){
try {
System.out.println("lalala: " + index);
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(TestThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Main.java
public class Main {
public static void main(String[] args) {
TestThread[] tt=new TestTask[10];
ExecutorService pool=Executors.newFixedThreadPool(5);
for(int i=0;i<10;i++ ){
tt[i]=new TestTask(i);
pool.execute(tt[i]);
}
pool.shutdown();
try {
pool.awaitTermination(100, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Finished");
}
很简单的一段代码,注意在Main.java中,shutdown()是必须要调用的,不然ExecutorService不会关闭,程序不会退出。
整个程序的执行结果正如你所想看到的,会先执行完前五个task,然后再执行后五个,最后打印"Finished"并退出。