【发布时间】:2018-02-21 14:52:36
【问题描述】:
我有一个 javafx 应用程序,我正在使用 FX 线程中调用阻塞方法
new Thread(() -> doWork(someParam)).start();
我希望用户能够单击调用方法的按钮,但不会冻结 UI。我还希望点击次数等于方法调用次数。
这目前解决了我的问题,但是这会导致内存使用方面的任何问题吗?我知道线程最终会死掉,垃圾收集器会对其采取行动,但这是不好的做法吗?
此外,当创建一个新线程时,它会被分配一个新的递增线程 ID。 线程ID溢出时会不会有问题?
【问题讨论】:
-
启动线程很慢。否则你会没事的,当线程对象和资源变得无法访问时,完成的线程和它们占用的所有资源都将被垃圾收集。在任何情况下,使用线程池:
ExecutorService threadPool = Executors.newChachedThreadPool();(或任何其他方法) - 这样您的代码会更快。 -
您可以使用线程池,其中每个池中的最大线程数保持不变。当这些线程加入时,可以将一个作业队列移交给池管理器,该管理器将管理一次有多少线程处于活动状态。
-
不,线程 ID 溢出应该没有问题。如果您给线程名称,则更是如此。但是,我建议您使用其他方法自己实际创建
Thread对象。执行器服务更适合您的需求。您需要的线程数等于按下按钮的次数,这看起来也很奇怪。你为什么需要那个?这可能会重复工作。
标签: java multithreading javafx