猿问

Java: 用newFixedThreadPool的时候,父线程如何给子线程传参啊?

Java: 用newFixedThreadPool的时候,父线程如何给子线程传参啊?

不负相思意
浏览 1490回答 6
6回答

慕码人8056858

子线程自定义构造函数,构造函数传参即可

青春有我

使用 execute 或者 submit 执行任务的时候,传入的任务参数必然是 Runnable 或者 Callable 的实现类 —— 那么在 实现类 中添加对应属性(引用),然后构造的时候将参数传入即可。

动漫人物

用newFixedThreadPool()的时候当前线程和线程池中的线程是父子关系?求指教

慕妹3146593

看你怎么传了 如果用类 构造方法里把属性传进去 如果用 lambda 直接传,但是没办法传基本类型的非final参数

烙印99

不知道题主是怎么使用这个方法的...我一般就直接起异步任务然后用到指定线程池的,传参的话,可以直接在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; } 不知道这种使用方法有没有到达你想要的要求啊

潇潇雨雨

通过 InheritableThreadLocal 传递就好了,父线程的对象,子线程也可以读到!
随时随地看视频慕课网APP

相关分类

Java
我要回答