【发布时间】:2017-01-06 17:32:56
【问题描述】:
我得到了一个大学作业,我必须用 Java 中的 Threads 实现一个刽子手游戏。 我的问题是我无法理解如何处理线程。 在我的代码中有一个 GameLeader 提示 GuessingPlayer 输入他在 startWord 中猜测的字符。在他这样做之后(run()-method),他将消息传递得更远。 两个玩家之间的连接应该用'Messages'(自己实现的类)来安排。如果我使用 run() 而不是 wait(),它就可以工作。 你能帮我理解为什么在第一次输入消息后while循环不起作用吗?
谢谢!
类 GameLeader:
public class GameLeader {
public static void main(String[] args) throws IOException {
GuessingPlayer guessingPlayer = new GuessingPlayer(userInterface);
String guess;
System.out.println("Please enter a startWord to begin!");
String startWord = userInterface.enterWord();
guessingPlayer.start();
while (attempts < 11) {
synchronized (guessingPlayer) {
System.out.println("It's your turn, Guessing Player!");
guessingPlayer.wait();
guess = guessingPlayer.message.toString();
if (startWord.contains(guess)) {
...
}
} else {
...
}
userInterface.mainMenu(guess);
}
}
}
}
类 GuessingPlayer:
public class GuessingPlayer extends Thread {
Message guessMessage;
private UserInterface userInterface;
GuessingPlayer(UserInterface userInterface) {
this.userInterface = userInterface;
}
@Override
public void run() {
synchronized (this) {
guessMessage = new Message(userInterface.enterWord());
notify();
}
}
}
【问题讨论】:
-
"...帮助我了解为什么 while 循环不起作用..." 除非您告诉我们您的期望和原因,否则我们无法帮助您当前输出对您来说错误。
-
tutorialspoint.com/java/java_multithreading.htm 这对于让我了解线程在 java 中的工作方式非常有帮助,并且包含一个非常简单的工作示例。
-
首先,我建议您查看有关线程的基本教程,例如。 Concurrency。其次,我认为这不是需要线程的问题,它们只会使事情进一步复杂化。最后,您展示了一些不好的做法,例如synchronizing on this instead of on a separate lock object 和extending
Threadinstead of implementingRunnable。 -
感谢您的回答。我现在明白了,wait() 类似于 sleep()。我知道没有线程会容易得多,也许这就是我如此困惑的原因。但是我忘了说guessingPlayer只有30秒来写一个字符/单词,我认为为此我需要同步?
标签: java multithreading synchronized