【发布时间】:2016-12-22 05:51:34
【问题描述】:
我在 Java 中使用 Fork 连接池进行多任务处理。现在我遇到了一种情况,对于每项任务,我需要点击一个 url,然后等待 10 分钟,然后再次点击另一个 url 来读取数据。现在的问题是,在那 10 分钟内,我的 CPU 处于空闲状态,并且没有启动其他任务(比 fork join pool 中定义的任务更多)。
static ForkJoinPool pool = new ForkJoinPool(10);
public static void main(String[] args){
List<String> list = new ArrayList<>();
for(int i=1; i<=100; i++){
list.add("Str"+i);
}
final Tasker task = new Tasker(list);
pool.invoke(task);
public class Tasker extends RecursiveAction{
private static final long serialVersionUID = 1L;
List<String> myList;
public Tasker(List<String> checkersList) {
super();
this.myList = checkersList;
}
@Override
protected void compute() {
if(myList.size()==1){
System.out.println(myList.get(0) + "start");
//Date start = new Date();
try {
Thread.sleep(10*60*1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(myList.get(0) + "Finished");
}
else{
List<String> temp = new ArrayList<>();
temp.add( myList.get( myList.size()-1 ) );
myList.remove( myList.size()-1 );
Tasker left = new Tasker(myList);
Tasker right = new Tasker(temp);
left.fork();
right.compute();
left.join();
}
}
现在我应该怎么做才能让 CPU 选择所有任务,然后并行等待它们。
【问题讨论】:
标签: java multithreading threadpool cpu fork-join