ParallelSteam设置线程数量失败,求指点,谢谢谢谢

入木三分手快乐 2017-08-09 01:44:53
parallelStream默认线程数为机器的核心数的数量,使用System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "n");来设置,为什么我设置之后做简单例子有效,实际运用中线程数量还是机器的核心数的值?
另外,假如我在另一个方法中使用parallelSteam执行多线程,是不是还要使用System。setProperty("****")再设置一遍线程数?
这里是不生效的,下面是我做的例子:
...全文
1256 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yurongsheng 2018-12-26
  • 打赏
  • 举报
回复
什么方法可以看到parallelSteam,用了几个线程
soton_dolphin 2017-08-09
  • 打赏
  • 举报
回复
引用 6 楼 qq_30209491 的回复:
[quote=引用 4 楼 qq_30209491 的回复:] [quote=引用 3 楼 soton_dolphin 的回复:] 你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
引用 3 楼 soton_dolphin 的回复:
你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
谢谢您的回复,非常感谢,我觉得用自己定义的池比较靠谱, 感觉设置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8 跟System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "n");是一样的,这样我设置16和设置2,线程数都是我的cup核心数8, ForkJoinPool myPool = new ForkJoinPool(8);,这个是设置并发数吗?如果设置并发数小于cup核心的话会不会当cup核心数处理?[/quote] 谢谢您 用第二种方法解决了我的问题,这个线程池被创建后用完要手动销毁吗?[/quote] 需要关闭
  • 打赏
  • 举报
回复
引用 4 楼 qq_30209491 的回复:
[quote=引用 3 楼 soton_dolphin 的回复:] 你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
引用 3 楼 soton_dolphin 的回复:
你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
谢谢您的回复,非常感谢,我觉得用自己定义的池比较靠谱, 感觉设置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8 跟System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "n");是一样的,这样我设置16和设置2,线程数都是我的cup核心数8, ForkJoinPool myPool = new ForkJoinPool(8);,这个是设置并发数吗?如果设置并发数小于cup核心的话会不会当cup核心数处理?[/quote] 谢谢您 用第二种方法解决了我的问题,这个线程池被创建后用完要手动销毁吗?
soton_dolphin 2017-08-09
  • 打赏
  • 举报
回复
引用 4 楼 qq_30209491 的回复:
[quote=引用 3 楼 soton_dolphin 的回复:] 你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
引用 3 楼 soton_dolphin 的回复:
你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
谢谢您的回复,非常感谢,我觉得用自己定义的池比较靠谱, 感觉设置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8 跟System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "n");是一样的,这样我设置16和设置2,线程数都是我的cup核心数8, ForkJoinPool myPool = new ForkJoinPool(8);,这个是设置并发数吗?如果设置并发数小于cup核心的话会不会当cup核心数处理?[/quote] public ForkJoinPool(int parallelism) Creates a ForkJoinPool with the indicated parallelism level, the default thread factory, no UncaughtExceptionHandler, and non-async LIFO processing mode. Parameters: parallelism - the parallelism level
  • 打赏
  • 举报
回复
引用 3 楼 soton_dolphin 的回复:
你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
引用 3 楼 soton_dolphin 的回复:
你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
谢谢您的回复,非常感谢,我觉得用自己定义的池比较靠谱, 感觉设置-Djava.util.concurrent.ForkJoinPool.common.parallelism=8 跟System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "n");是一样的,这样我设置16和设置2,线程数都是我的cup核心数8, ForkJoinPool myPool = new ForkJoinPool(8);,这个是设置并发数吗?如果设置并发数小于cup核心的话会不会当cup核心数处理?
soton_dolphin 2017-08-09
  • 打赏
  • 举报
回复
你可以在运行的时候设置虚拟机参数,或者用自己定义的池 -Djava.util.concurrent.ForkJoinPool.common.parallelism=8 ForkJoinPool myPool = new ForkJoinPool(8); myPool.submit(() -> list.parallelStream().forEach(/* Do Something */); ).get();
  • 打赏
  • 举报
回复 1
有人看到吗?麻烦留个名让我看到有人在看帖
  • 打赏
  • 举报
回复
第一次发帖子

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧