【发布时间】:2018-12-25 14:41:12
【问题描述】:
字段值是 float[],我有点困惑,因为当我调试代码时,我遇到的问题是,当一个线程正在工作并使用我的 float[] 值数组时,其他线程正在等待这是否正常?我不关心数组上的错误数据,因为线程正在计算数组的不同部分
ExecutorService executor = Executors.newFixedThreadPool(threads);
List<PartOfImage> callables;
for(int j=0;j<200;++j)
for(int i=0;i<threads;++i){
callables=new LinkedList<>();
callables.add(new PartOfImage(values,width,(height/threads)*i, (height/threads)*(i+1),
oldImage,((i+1)%threads)==0,(i%threads)==0));
List<Future<Object>> answers = executor.invokeAll(callables);
oldImage=getValues();
}
【问题讨论】:
-
你没有显示你的执行者的定义。如果是单线程执行器,它会串行执行任务,而不是并行执行。
-
好的,我已经添加了。
-
getValues();的定义是什么?我假设您必须使用Future.get(),在这种情况下呼叫被阻塞。 -
每个逻辑核一次只能运行一个线程,其他的都需要等待。我建议使用并行流来更有效地安排这个。
-
我不明白一件事,我的处理器有4核8线程。那么我可以使用 executor 或 4 运行 8 个线程吗?因为你说的是核心......
标签: java concurrency