使用 JAVA 并行流时是否可以为每个线程传递资源?

我的问题真的很简单,但我没有找到明确回答的主题......(也许我错过了......:o)。我想知道,在使用并行流时,是否可以为每个线程提供自定义数据(每个线程不同)。

例如,我们可以想象我想知道哪个线程处理了哪个实体。

例如:我有以下集合 [0,1,2,3,4,5] 我创建并行流并使用 map 方法使正方形与每个元素相关联。我应该有以下输出:[0,1,4,9,16,25] 但我想确定哪个线程处理了哪些实体,例如,如果我有 2 个线程:

线程 1 -> [0,1,2]

线程 2 -> [3,4,5]

我希望我很清楚,在此先感谢那些愿意花时间回答我问题的人!


小怪兽爱吃肉
浏览 92回答 1
1回答

回首忆惘然

您可以从Thread.currentThread()当前活动的上下文中获取线程。看到这个小片段:final int[] ints = IntStream.range(0, 6)    .parallel()    .map(i -> {        System.out.println("thread " + Thread.currentThread().getName() + " maps " + i + " to " + i * i);        return i * i;    })    .toArray();System.out.println("Final array " + Arrays.toString(ints));打印如下内容:thread main maps 5 to 25thread ForkJoinPool.commonPool-worker-1 maps 2 to 4thread ForkJoinPool.commonPool-worker-2 maps 3 to 9thread ForkJoinPool.commonPool-worker-3 maps 0 to 0thread main maps 1 to 1thread ForkJoinPool.commonPool-worker-4 maps 4 to 16Final array [0, 1, 4, 9, 16, 25]虽然这不是确定性的,例如每次迭代都可能导致不同的打印结果
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java