我只使用标准库从头开始构建游戏。到目前为止,我已经有了一个游戏,它在一个摆动窗口中打印ASCII字符来表示3d对象。这很酷。无论如何,由于我不了解线程或安排,我想知道我是否使用了一些可能导致问题的不良做法。我有一个重复的任务运行,每十分之一秒更新一次,但每当我想延迟一些事情时,我都会使用
Executors.newScheduledThreadPool(1).schedule... etc etc.
制作一个新的预定线程池"是否合适?每次我想要一个新的延迟任务运行一次,或者我应该尝试保持一个实例运行?如果重用实例很好,那么何时制作新实例呢?
答案 0 :(得分:0)
Swing应用程序中的并发很棘手:影响GUI的所有内容都需要在单个线程上执行(称为事件派发线程)。因此,当您设置一个单独的线程来执行一些长时间运行的后台任务时(例如,为玩家尚未查看的区域生成地图),您需要仔细地工作以与可能影响GUI的任何内容同步。
通常,对于更简单的用例,您有两种选择:
还有很多其他方法可以实现与其他线程的交互(例如,请参阅SwingUtilities.invokeLater
和SwingUtilities.invokeAndWait
),但鉴于您已经说过刚刚开始,我会建议您坚持使用其中一个现在。它们为您处理大部分复杂性,让您专注于您的游戏逻辑。