更多线程知识访问 www.itkc8.com
线程池工具类:
import java.util.concurrent.*;
public class CommonThreadPool {
private static ExecutorService exec = new ThreadPoolExecutor(50, 100, 0L,
TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(10000),
new ThreadPoolExecutor.CallerRunsPolicy());
public static void execute(Runnable command) {
exec.execute(command);
}
// 子线程执行结束future.get()返回null,若没有执行完毕,主线程将会阻塞等待
public static Future submit(Runnable command) { return exec.submit(command); }
// 子线程中的返回值可以从返回的future中获取:future.get();
public static Future submit(Callable command) {
return exec.submit(command);
}
}
测试类:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class ThreadTest {
@Test
public void ThreadTest() {
List<Future> futureList = new ArrayList<>();
for(int i = 0; i < 4; i++) {
int finalI = i;
Future future = CommonThreadPool.submit(() -> {
try {
System.out.println(finalI + " 我执行了。。。");
Thread.sleep(5000L);
System.out.println(finalI + " 我执行完了。。。");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
futureList.add(future);
}
//主线程处理其他工作,让子线程异步去执行.
mainThreadOtherWork();
System.out.println("now waiting sub thread done.");
//主线程其他工作完毕,等待子线程的结束, 调用future.get()系列的方法即可。
//
try {
for (Future future : futureList) {
System.out.println(future.get());
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
try {
System.out.println("处理一.");
Thread.sleep(1000);
System.out.println("处理二.");
Thread.sleep(1000);
System.out.println("处理三.");
Thread.sleep(1000);
System.out.println("处理四.");
Thread.sleep(1000);
System.out.println("所有处理完成.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void mainThreadOtherWork() {
System.out.println("主线程开始工作");
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程干完了");
}
}
执行结果:
主线程开始工作
0 我执行了。。。
2 我执行了。。。
3 我执行了。。。
1 我执行了。。。
主线程干完了
等待子线程执行.
2 我执行完了。。。
3 我执行完了。。。
1 我执行完了。。。
0 我执行完了。。。
null
null
null
null
处理一.
处理二.
处理三.
处理四.
所有处理完成.