問題は、ブロックの同期の効果が見えないことです。理論では、ブロックがその時点で処理されるスレッドで終了するまで、ブロックをロックすることを想定しています。 synchronizedブロックの有無にかかわらず次のコードを実行すると、何も変わりません。少なくとも、それは私の考えです。基本的に、これらのスレッドを整然とした方法で表示させるにはどうしたらいいですか?ありがとうございました。非同期スレッドと同期スレッドの違い
public class Threads9 extends Thread{
private String name;
public Threads9(String paramName){
name = paramName;
}
public void run() {
print();
}
private void print() {
synchronized(this){
for(int i = 0;i<10;i++){
System.out.println(name+ " looping");
}
}
}
}
public class Threads9Main{
public static void main(String[] args) {
Threads9 thread1 = new Threads9("Thread1");
Threads9 thread2 = new Threads9("Thread2");
thread1.start();
thread2.start();
}
}
このメソッドはスレッドセーフではありませんので、 'のSystem.out.println(...)を使用すると、'例えばそれは出力がシステム 'と同じ順序で書かれていることを保証するものではありません(良いアイデアではありません。 out.println(...) 'が呼び出されました)。 「このチュートリアル」(https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html)を参照してください。 – Turing85
2つのスレッドが異なるオブジェクト上で同期しています。 –
Re、 "...何も変わらない"これはあなたが見ている問題を説明するための非常に弱い方法です。今回は運が良かったが、このサイトで助けを得るための最善の方法(つまり、最良の助けを得る方法)は、あなたのコードを表示し、あなたが思ったことを詳細に教え、それがどのように失敗したか教えてください(予期しないエラーメッセージの完全なテキストを含む)あなたの期待に応えて、何が間違っているのかを聞いてください。 –