【发布时间】:2018-04-20 15:56:36
【问题描述】:
在 JFX 应用程序中具有以下相当微不足道的意图:当在键盘上按下一个键并因此调用一个 handle(event ev) 方法时,我希望在另一个未使用的线程中发生某些事情。
到目前为止,我发现有三个选项:
要么直接在句柄中创建新线程:
public void handle(KeyEvent ke)
{
new Thread(() -> {
// THE CODE
}).start();
}
}
或者我在程序开始时启动一个不同的线程,看起来像这样:
public void run()
{
while(true)
{
if (triggered)
{
// THE CODE
}
}
}
然后在handle() 方法中,我只是将“触发”字段设置为true。
第三种方法是创建尽可能多的扩展“线程”类的实例,以便并行执行,并在句柄()中使用它们的 start() 函数。
嗯,据我所知,前一种方法由于线程创建而具有很大的开销。
第二种方法在 99.9% 的时间里毫无意义地需要 CPU 资源。 这只能通过在循环中添加 sleep() 来削弱。
第三种方法似乎与第一种方法非常相似,因为大多数资源都是在调用 start() 时分配的,还是我错了? 该方法还有一个缺点是必须在内存中保留多个实例,因为我无法预测将并行调用多少个实例。
您会建议什么解决方案? 还有其他可能吗?
提前非常感谢!
【问题讨论】:
标签: java multithreading javafx