わかりました、それで、誰かがここでの私の知識のギャップを説明してもらえますか?
以下の例では、最初はインスタンス メソッドを同期しようとしていましたが、その後、新しいインスタンスを生成したため、ロックが発生しないことに気付きました。
そこで、スレッドが正常に実行されることを期待して、クラスの静的メソッドをロックすることにしましたが、それでもうまくいきません。私のやり方の誤りを説明できる人はいますか? (理解を深めるだけで、これを行うためのより良い方法がおそらくあるのでご了承ください。私はJavaを使用するPHP開発者です。大好きです-しかし、私はたった2日です;-))
したがって、この時点では数字はランダムな順序で出力されます。
クラス1
package learningjava;
public class LearningJava {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ThreadCaller ob1 = new ThreadCaller("This is a test string 1");
ThreadCaller ob2 = new ThreadCaller("This is a test string 2");
ThreadCaller ob3 = new ThreadCaller("This is a test string 3");
ThreadCaller ob4 = new ThreadCaller("This is a test string 4");
ThreadCaller ob5 = new ThreadCaller("This is a test string 5");
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
ob4.t.join();
ob5.t.join();
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
クラス2
package learningjava;
public class ThreadCaller implements Runnable {
private String message;
public Thread t;
public ThreadCaller(String text) {
message = text;
t = new Thread(this);
t.start();
}
public static synchronized void echo(String message) {
System.out.println(message);
}
public void run() {
ThreadCaller.echo(this.message);
}
}