67,513
社区成员
发帖
与我相关
我的任务
分享
// 初始化线程池,边界为当前电脑cpu核数+1
ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
threadPool.execute(new Thread(new Runnable(){}));
看到没,其实线程池的使用很简单,java已经提供了几种线程池的实现方式,然后扔进去线程就可以执行了,上边是一个有边界的线程池,线程池初始化之后,如果没有执行execute的话里面的线程数是0,执行过之后才会有值,知道达到边界值。
package com.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.mvc.listener.ThreadListener;
import org.apache.commons.mvc.thread.ExecuteThread;
import org.apache.commons.mvc.thread.MoreThread;
public class Test {
public static void main(String[] args) {
List<ThreadListener> list = new ArrayList<ThreadListener>();
for (int i = 0; i < 10; i++) {
list.add(new ThreadImpl());
}
List<Object> result = MoreThread.run(list, null);
System.out.println(result);
}
private static class ThreadImpl implements ThreadListener {
@Override
public Object run(int index) throws Exception {
System.out.println("第" + index + "个线程跑过了");
return index * index;// 返回一个平方数
}
@Override
public void finish(Date startTime, int overCount) {
// 单个线程完成之后
}
@Override
public void blackout(int index, Exception e, ExecuteThread thread, List<ExecuteThread> threads) {
// 单个线程执行失败
}
}
}
第0个线程跑过了
第4个线程跑过了
第3个线程跑过了
第2个线程跑过了
第1个线程跑过了
第6个线程跑过了
第5个线程跑过了
第8个线程跑过了
第9个线程跑过了
第7个线程跑过了
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]