我正在为我的游戏开发网络,并且运行客户端和服务器。服务器当前在另一个Thread
中无限循环,但我的客户端和游戏代码在同一个线程中。当客户端处理来自服务器的数据时,我遇到了问题,游戏一直挂起,直到客户端完成处理新数据包。
我试图通过使客户端类实现Runnable
来解决这个问题,并在一个单独的线程中运行。我遇到了一些其他错误,我想知道这是不是问题。
我有 run
方法和 sendPacket
方法:
public void run() {
// empty
}
public void sendPacket() {
somePacketSendingCode();
}
run
方法中没有代码,因为我只使用sendPacket
方法。收到数据包时,侦听器线程会调用sendPacket
。
如果run
方法中没有代码,那是否意味着客户端Thread
在启动后停止执行?如果是这样,那是不是意味着sendPacket
方法什么都不做?
答案 0 :(得分:6)
AFAIK,当run()方法返回时,线程停止。 Thread States
答案 1 :(得分:5)
如果您没有在sendPacket
方法中调用run
方法,那么它将永远不会执行。一旦run
返回,线程就会停止。
请注意,只有run方法包含线程的实际代码。你在帖子中说你有sendPacket
方法并且只使用那个方法。这意味着您实际上并没有并行运行任何东西。调用start()
时将触发并行线程,run
异步调用sendPacket
方法。仅调用{{1}}并非并行性。
答案 2 :(得分:4)
run()方法返回后,线程终止。如果您已调用sendPacket,则发送的任何数据包都将传递给操作系统,并将传递数据包。任何未发送的数据包都必须由另一个线程发送或丢失。