在Java中同时做两件事

在Java中同时做两件事,java,Java,嗯,我正在用Java开发一个在线游戏。我有一个客户端和一个服务器。语音系统等待新消息显示如下: public void addSpeech(String msg) { String newMsg = parsel10n(msg); m_narrator.addSpeech(parsel10n(newMsg)); while (!m_narrator.getCurrentLine().equalsIgnoreCase(newMsg)) ; while (

嗯,我正在用Java开发一个在线游戏。我有一个客户端和一个服务器。语音系统等待新消息显示如下:

public void addSpeech(String msg) {
    String newMsg = parsel10n(msg);
    m_narrator.addSpeech(parsel10n(newMsg));
    while (!m_narrator.getCurrentLine().equalsIgnoreCase(newMsg))
      ;
    while (!m_narrator.getAdvancedLine().equalsIgnoreCase(newMsg))
      ;
 } 

问题是。。应用程序的其余部分由于while循环而停止。在这个循环中,我没有看到任何其他玩家移动或看到聊天。有没有一种方法可以运行此方法,而不必使用循环接触应用程序(客户端)的其余部分?应该包括线程吗?我希望你能回答我

是的,应该包括线程

如果您只想与主执行线程并行启动任务,可以执行以下操作:

new Thread(){
   public void run(){
        addSpeech();
   }
}.start();
但您必须检查数据结构是否可以从多个线程访问


您可能想在任务结束时做些什么,等等。所以我建议您查找有关java线程和任务队列的教程。

要同时执行多个任务,您需要使用多个线程


在任何情况下,除了在GUI线程上执行琐碎的计算或延迟之外,任何操作都被认为是不好的做法,否则它可能会锁定一段时间。

使用多线程。有关更多详细信息,请参阅java.util.concurrent包。您可以使用观察者模式发送信号和通知

哪个更快?每次都使用守护进程线程或创建新线程?java中的线程并不十分昂贵,但通常最好保留todo任务的一部分,并保留相同的线程(或池,如果确实需要)。runnable和timer类呢?当需要大约50毫秒的时间间隔时,它们是否有效?一台可运行设备本身不需要任何成本。而且计时器很有效,是的。但是你需要每50毫秒发射一次吗?不要忘记任务的核心可能很繁重。在中,OP显示了一个线程在后台运行,以清空其他线程可以填充的队列(在本例中,他的整个类扩展了线程)。