JAVA里怎么让2个FOR循环并发同时执行
在一个函数里的2个FOR循环怎么让他们同时开始循环而不是按照书写的顺序单独顺序循环?不行的话改怎么做达到这个效果...
在一个函数里的2个FOR循环怎么让他们同时开始循环而不是按照书写的顺序单独顺序循环?不行的话改怎么做达到这个效果
展开
5个回答
展开全部
一个函数里不可能让两个for循环同时开始运行,在一个函数里面它始终是从上往下依次执行的,要同时运行两个for循环你只有开线程了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我的理解是,题主想让一个for语句的循环并发。
如果理解没错的话,这样创建线程应该可以帮到你。
package intellif.dzw;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
public class TestThread {
private static final ForkJoinPool THREAD_POOL = new ForkJoinPool(Runtime.getRuntime().availableProcessors() + 4);// 线程池
public void testThread() {
List<String> list=new LinkedList<>();
List<Future<?>> tasklist = new ArrayList<>();
for (String id : list) {
tasklist.add(THREAD_POOL.submit(() -> {// 创建线程
// 循环体
}));
}
tasklist.forEach(FunctionUtil::waitTillThreadFinish);// 等待所有线程结束
}
}
class FunctionUtil {
public static Object waitTillThreadFinish(Future<?> thread) {
try {
return thread.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return Optional.ofNullable(null);
}
}
如果理解没错的话,这样创建线程应该可以帮到你。
package intellif.dzw;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
public class TestThread {
private static final ForkJoinPool THREAD_POOL = new ForkJoinPool(Runtime.getRuntime().availableProcessors() + 4);// 线程池
public void testThread() {
List<String> list=new LinkedList<>();
List<Future<?>> tasklist = new ArrayList<>();
for (String id : list) {
tasklist.add(THREAD_POOL.submit(() -> {// 创建线程
// 循环体
}));
}
tasklist.forEach(FunctionUtil::waitTillThreadFinish);// 等待所有线程结束
}
}
class FunctionUtil {
public static Object waitTillThreadFinish(Future<?> thread) {
try {
return thread.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return Optional.ofNullable(null);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呃,恕我愚昧,同一个cpu在同一时刻能执行2个指令,很明显不可能。同理,同一个函数里不可能做到2个for循环一起的,无论是并发还是并行。如果真有,记得回我一声,我也学习下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不明白这样有什么意义呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询