2 つのスレッドを 1 つの Ping と 1 つの Pong にしようとしています。Ping は常に最初に実行する必要があるという考えです。同期メソッドを使用しています。ここで私のコードの何が問題なのかわかりません。それはうまくいくはずです。私は多くのドキュメントを読みました。ですので、参考になれば幸いです。シンプルなものだとおもいます。どんな助けでも大歓迎です
class Ping extends Thread {
private Table table;
private String text1 = "";
public Ping(Table t)
{
table = t;
}
public void run() {
for (int i = 0; i < 10; i++) {
text1= table.getPing();
System.out.println(text1);
}
}
}
class Pong extends Thread {
private Table table;
private String text1 = "";
public Pong(Table t)
{
table = t;
}
public void run() {
for (int i = 0; i < 10; i++) {
text1= table.getPong();
System.out.println(text1); }
}
}
class Table extends Thread {
private Table table;
private boolean pinged = false;
public synchronized String getPong() {
while (pinged == false) {
try {
//System.out.println("WAIT PONG");
wait();
}
catch (InterruptedException e)
{ }
}
pinged = false;
notifyAll();
String text = "pong";
return text;
}
public synchronized String getPing() {
while (pinged == true) {
try {
wait();
//System.out.println("WAIT PING");
} catch (InterruptedException e) { }
}
pinged = true;
notifyAll();
String text = "ping";
return text;
}
}
public class PingPong {
//private static final int WAIT_TIME = 200;
public static void main(String args[]) {
Table t = new Table();
Pong pong = new Pong(t);
Ping ping = new Ping(t);
System.out.println("main: starting threads...");
pong.start();
ping.start();
System.out.println("main: threads started, sleep a while " +
"and wait for termination of Ping and Pong");
System.out.println("both threads terminated");
}
}
それぞれの結果は異なりますが、奇妙なことに、繰り返しが発生します。
ping
pong
ping
ping
pong
pong
pong
ping
ping
ping
pong
pong
pong
ping
pong
ping
ping
pong
ping
pong