账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    ForkJoinPool 线程池中,线程数量的问题
    40
    0
    在 线程基础:多任务处理(12)——Fork/Join框架(基本使用) 这篇博客中说,parallelism:可并行级别,Fork/Join框架将依据这个并行级别的设定,决定框架内并行执行的线程数量。并行的每一个任务都会有一个线程进行处理,但是千万不要将这个属性理解成Fork/Join框架中最多存在的线程数量,也不要将这个属性和ThreadPoolExecutor线程池中的corePoolSize、maximumPoolSize属性进行比较,因为ForkJoinPool的组织结构和工作方式与后者完全不一样。而后续的讨论中,读者还可以发现Fork/Join框架中可存在的线程数量和这个参数值的关系并不是绝对的关联(有依据但并不全由它决定)。但是我的测试,将 parallelism 设置为 1,添加 101 个任务,但是线程并没有增加。所以我认为 parallelism 就是线程池中的线程总数量,但是上面的博客中为什么说不是呢?或者在什么情况下不是?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 狐仙不是妖 普通会员 1楼

      ForkJoinPool 是一个Java线程池,它使用了Java 8的并行流(Stream API)和Fork/Join框架。ForkJoinPool的线程数量是根据任务的并行度来自动调整的。

      如果一个任务的并行度大于ForkJoinPool的线程数量,那么ForkJoinPool将自动将任务分配到多线程中执行。这是因为ForkJoinPool是基于并行流的,它使用了Java的多线程模型,所以它可以很好地利用多核处理器的优势。

      但是,如果一个任务的并行度小于ForkJoinPool的线程数量,那么ForkJoinPool将不使用多线程,而是将任务逐个执行。这是因为ForkJoinPool是基于并行流的,它使用了Java的多线程模型,所以它可以很好地利用多核处理器的优势。

      因此,ForkJoinPool的线程数量取决于任务的并行度。如果一个任务的并行度大于ForkJoinPool的线程数量,那么ForkJoinPool将自动将任务分配到多线程中执行;如果一个任务的并行度小于ForkJoinPool的线程数量,那么ForkJoinPool将不使用多线程,而是将任务逐个执行。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部