【发布时间】:2014-04-05 04:39:11
【问题描述】:
public void run() {
assignPlayer();
for(int i = 0; i < numPlayers; i++) {
PlayerListener listener = new PlayerListener(fromPlayer.get(i), this, i);
new Thread(listener).start();
}
return;
}
我正在实现一个套接字游戏。每场比赛都有 2 名玩家,每场比赛都有自己的线程。上面的 run 方法将 PlayerListener(它是一个 Runnable 对象)分配给每个玩家以侦听他们传入的输出流,如果有要执行的操作,则从游戏对象中调用一些方法。一切运行良好,但我在想我的游戏线程什么时候会死掉,所以我故意在 PlayerListener 分配完成后设置“return”(但我认为分配完成后,不会有任何语句所以 run 方法会运行反正 )。无论如何,我的游戏仍在运行,我的线程不应该死掉,我的游戏对象也会随之死去吗?
是因为 PlayerListener 对象仍然不时调用游戏对象的方法,所以对象没有被垃圾回收??
我阅读了When does a Java Thread reach the 'Die' State 的帖子。它声明“如果 run() 方法返回”,所以我很好奇......
【问题讨论】:
-
但是您启动了
numPlayer线程...假设您在run中的循环实际上是Thread,一旦run存在,线程就会终止。你有什么证据证明它没有?在剩下的唯一线程是守护线程之前,JVM 不会停止...... -
是的,这就是关键——您正在运行仍然存在的非守护线程。
-
因为游戏来自服务器,玩家听服务器(游戏),如果死了,游戏不会向玩家提供信息,但在我的情况下玩家仍然得到响应.所以我猜它没有死?
-
@MadProgrammer 你是说因为 PlayListener(a thread) 对象仍在运行,所以只要 PlayListener 对象存在,游戏中的 run 方法就不会死?
-
如果不知道主要的
run方法是什么(即从 Runnable 或 Thread 或只是一个普通方法实现),不可能 100% 确定,但是虽然有非守护线程在运行,JVM不会退出。在您的示例中,一旦循环完成,run方法将正常退出
标签: java multithreading