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

时间:2011-12-09 11:57:31

标签: java multithreading

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

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

我有 run 方法和 sendPacket 方法:

public void run() {
    // empty
}

public void sendPacket() {
    somePacketSendingCode();
}

run方法中没有代码,因为我只使用sendPacket方法。收到数据包时,侦听器线程会调用sendPacket

如果run方法中没有代码,那是否意味着客户端Thread在启动后停止执行?如果是这样,那是不是意味着sendPacket方法什么都不做?

3 个答案:

答案 0 :(得分:6)

AFAIK,当run()方法返回时,线程停止。 Thread States

答案 1 :(得分:5)

如果您没有在sendPacket方法中调用run方法,那么它将永远不会执行。一旦run返回,线程就会停止。

请注意,只有run方法包含线程的实际代码。你在帖子中说你有sendPacket方法并且只使用那个方法。这意味着您实际上并没有并行运行任何东西。调用start()时将触发并行线程,run异步调用sendPacket方法。仅调用{{1}}并非并行性。

答案 2 :(得分:4)

run()方法返回后,线程终止。如果您已调用sendPacket,则发送的任何数据包都将传递给操作系统,并将传递数据包。任何未发送的数据包都必须由另一个线程发送或丢失。