Java: 用newFixedThreadPool的时候,父线程如何给子线程传参啊?
6 回答
青春有我
TA贡献1784条经验 获得超8个赞
使用 execute
或者 submit
执行任务的时候,传入的任务参数必然是 Runnable
或者 Callable
的实现类 —— 那么在 实现类 中添加对应属性(引用),然后构造的时候将参数传入即可。
烙印99
TA贡献1829条经验 获得超13个赞
不知道题主是怎么使用这个方法的...我一般就直接起异步任务然后用到指定线程池的,传参的话,可以直接在CompletableFuture.supplyAsync
里的参数直接使用就是了,举个栗子
public static void main(String[] args) {
// 起10个线程的线程池
ExecutorService myExecutor = Executors.newFixedThreadPool(10);
// length和param就是所谓的父线程的参数吧
Long length = 1l;
BigDecimal param = new BigDecimal(0);
// 创建10个异步任务,采用的线程池就是自己创建的线程池myExecutor,然后调用doSomeThing里可以直接把父参数传入子方法
List<CompletableFuture<Long>> collect = IntStream.rangeClosed(1, 10).mapToObj(i -> CompletableFuture.supplyAsync(() -> doSomeThing(length, param), myExecutor)).collect(Collectors.toList());
List<Long> longs = collect.stream().map(CompletableFuture::join).collect(Collectors.toList());
System.out.println(longs);
}
/**
* 这个私有方法到时候就是子线程执行的地方
*/
private static Long doSomeThing(Long length, BigDecimal param) {
return length;
}
不知道这种使用方法有没有到达你想要的要求啊
添加回答
举报
0/150
提交
取消