質問

このコードが与えられます:

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はアトミックではなく、順序に関する何かを保証していますが、変更するフラグを待つことによって順序を強制することができます。とにかく、何を強制しようとしていることのシーケンシャルのです。あなたは、シングルスレッド環境で自由のためにこれを取得する:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top