在 run() 方法完成执行后,线程会自动关闭吗?

2022-09-04 02:43:57

我目前正在为我的游戏开发网络,并运行客户端和服务器。服务器目前在另一个中无限循环,但我的客户端和游戏代码在同一线程中。当客户端处理来自服务器的数据时,我遇到了问题,游戏挂起,直到客户端完成处理新数据包。Thread

我试图解决这个问题,通过使客户端类实现,并在单独的线程中运行。我遇到了一些其他错误,我想知道这是否是问题所在。Runnable

我有run方法和sendPacket方法:

public void run() {
    // empty
}

public void sendPacket() {
    somePacketSendingCode();
}

方法中没有代码,因为我只使用该方法。 在收到数据包时由侦听器线程调用。runsendPacketsendPacket

如果我的方法中没有代码,这是否意味着客户端在启动后停止执行?如果是这样,这是否意味着该方法将无所作为?runThreadsendPacket


答案 1

如果不在方法内部调用该方法,则它永远不会执行。线程一返回就会停止。sendPacketrunrun

请注意,只有 run 方法包含线程的实际代码。您在帖子中说您有该方法,并且仅使用该方法。这意味着您实际上并没有并行运行任何内容。当您调用 时,将触发一个并行线程,该线程以异步方式调用该方法。仅调用不是并行性。sendPacketstart()runsendPacket


答案 2

AFAIK,当 run () 方法返回时,线程将停止。线程状态