-
19-09-2019 - |
質問
このコードが与えられます:
public class Messager implements Runnable {
public static void main(String[] args) {
new Thread(new Messager("Wallace")).start();
new Thread(new Messager("Gromit")).start();
}
private String name;
public Messager(String name) { this.name = name; }
public void run() {
message(1); message(2);
}
private synchronized void message(int n) {
System.out.print(name + "-" + n + " ");
}
}
私はsynchronized
キーワードは、オブジェクトのロックにスレッドが依存させることを理解しています。質問:
a)のロックがsynchronized
の仕上げとしてマークされた方法とすぐに解放されていますか?または、すぐにスレッドのrun()
メソッドが終了すると
B)私は、スレッドのいずれか一方が他方の前に、その名前と1 2
を印刷することを保証することはできますか?
解決
A。はい。それは、すぐsynchronized
機能が終了すると解除されます。
B.はい。あなたがそうしたい場合は、しかし、なぜあなたが最初の場所でのマルチスレッドコードを書くでしょうか? synchronized
はアトミックではなく、順序に関する何かを保証していますが、変更するフラグを待つことによって順序を強制することができます。とにかく、何を強制しようとしていることのシーケンシャルのです。あなたは、シングルスレッド環境で自由のためにこれを取得する:)
所属していません StackOverflow