Concurrency Java fork-join问题
我正在学习java中的fork-join技术,并编写了以下程序。我正在运行for循环(5次),我希望在单独的线程中运行for循环的内容。这是正确的。问题是,当所有线程都完成时,我需要一个大小为5的向量,它必须包含索引0处线程1的执行结果,索引1处线程2的执行结果。。。。。。。。。。。。在索引4处执行线程5的结果。我清楚地想象了我想要实现的目标,但不知道它的语法 目前我的向量中只有一个数字Concurrency Java fork-join问题,concurrency,executorservice,java.util.concurrent,callable,fork-join,Concurrency,Executorservice,Java.util.concurrent,Callable,Fork Join,我正在学习java中的fork-join技术,并编写了以下程序。我正在运行for循环(5次),我希望在单独的线程中运行for循环的内容。这是正确的。问题是,当所有线程都完成时,我需要一个大小为5的向量,它必须包含索引0处线程1的执行结果,索引1处线程2的执行结果。。。。。。。。。。。。在索引4处执行线程5的结果。我清楚地想象了我想要实现的目标,但不知道它的语法 目前我的向量中只有一个数字 import java.util.Random; import java.util.Vector; impo
import java.util.Random;
import java.util.Vector;
import java.util.concurrent.*;
public class App {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService executor = Executors.newCachedThreadPool();
Future<Vector<Integer> > futureResult = null;
for(int i = 0; i < 5; i++){
futureResult = executor.submit(new Callable<Vector<Integer> >(){
@Override
public Vector<Integer> call() throws Exception {
Random random = new Random();
int duration = random.nextInt(4000);
Vector<Integer> v = new Vector<Integer>();
v.add(duration);
return v;
}
});
}
executor.shutdown();
try {
System.out.println(futureResult.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
import java.util.Random;
导入java.util.Vector;
导入java.util.concurrent.*;
公共类应用程序{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
ExecutorService executor=Executors.newCachedThreadPool();
未来结果=空;
对于(int i=0;i<5;i++){
futureResult=executor.submit(新的可调用(){
@凌驾
公共向量调用()引发异常{
随机=新随机();
int duration=random.nextInt(4000);
向量v=新向量();
v、 添加(持续时间);
返回v;
}
});
}
executor.shutdown();
试一试{
System.out.println(futuresult.get());
}捕获(中断异常|执行异常e){
e、 printStackTrace();
}
}
}
您正在每个线程中创建一个新的向量,而不与共享内存建立任何连接。您只需将要写入的索引传递给每个线程,还可以将向量更改为数组或预先分配的内容
另一个选项是分配5个向量位置,并将每个整数对象发送到其线程