【问题标题】:javafx thread limit to 32?javafx线程限制为32?
【发布时间】:2019-03-17 02:46:04
【问题描述】:

javaFX 是否限制了它的最大线程数?

我做了一个javaFX演示:

https://gist.github.com/arnesacnussem/a049f0761c0db9844d19e2d639dcccff

它的目的是使用Service 来创建updateValue() 的动画

每个AutoMoveCircle 有3 个service

在第 23 行,我创建了 20 个,但其中只有 10 个出现在 pane

每个服务都有自己的线程,只有31个服务线程

还有一个JavaFX Application Thread,所以总共有32个线程。

有限制吗?我该如何改变呢?

【问题讨论】:

  • 请注意Service 有一个executor 属性,您可以设置它以使其使用您自己的Executor 并拥有更多线程数。
  • @Slaw 这比创建一个新的线程池要好得多,alos 可以让我不关注 fx 线程结束后留下的那些线程。谢谢
  • 我确实建议使用AnimationTimer 而不是几个服务:只需根据上次更新时间与传递给handle方法的时间之间的差异检查是否需要更新。只要您不添加任何更昂贵的更新,这应该没有任何问题。此外,它避免使用大量线程+同步,这可能会给 javafx 应用程序线程带来更大的压力,而不是简单地在应用程序线程上进行所有计算我描述的方式。

标签: java multithreading javafx


【解决方案1】:

Service 的内部执行器有一个线程池,限制为32 线程。或者,不要使用 Service 类。相反,创建一个新的执行程序并将您的 Task 对象提交给它。比如:

ExecutorService executorService = Executors.newFixedThreadPool(50);
Task<Paint> task = new Task<Paint>() { ... }
executorService.submit(task);

【讨论】:

  • 当然你可以创建自己的ExecutorService并直接使用,但你也可以设置Serviceexecutor属性。
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多