スレッドクラスを拡張するクラスAの2つのスレッドa1
,a2
を作成します。クラスAは2つのコンストラクタを宣言し、同期されたメソッドを実行します。Javaのsynchronizedキーワード
public class Main {
public static void main(String[] args) {
A t = new A() ;
A a1 = new A (t) ;
A a2 = new A (t) ;
a1.start();
a2.start();
}
}
class A extends Thread {
public A() {
super() ;
}
public A(Thread th) {
super(th) ;
}
@Override
public synchronized void run() {
for (int i = 0; i <13; i++) {
System.out.print(i+" ");
}
}
}
しかし、私:私はこのフォームでコードを書くときrun
メソッドが同期として宣言されていると私は
0 0 1 1 2 3 4 5 6 7 2 8 3 9 4 10 5 11 6 12 7 8 9 10 11 12
コードのような結果を取得していますが、2つのスレッドが時々同時に開始しますクラスThread介して2つのスレッドを作成し、
Thread a1 = new Thread (t);
Thread a2 = new Thread (t);
同期方法run
仕事と2つのスレッドがで起動しませんではありませんなぜsynchronizedキーワード私はThraedクラスから2つのスレッドを作成するとき、私はクラスA(私は2つのコンストラクタを定義している)と、仕事から2つのスレッドを作成するときに動作しません:同じ時間は常に
0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 12
私の質問を結果を与えますか?
スレッドが最初のケースで同時に起動するのはどうですか?混ざった出力が見えますか?その成果を見せてください。 –
私は、 'synchronized'が実際に正しく動作していることを保証することができます。あなたは 'Thread'オブジェクト自体で同期していますが、これは本当に少し意味がありません。 –
私の友人は正しく動作します。あなたの間違いはここで理解しています**スレッドa1 =新しいスレッド(t); Thread a2 = new Thread(t); ** small description = 2つの異なるロックを持つ2つの異なるオブジェクトを作成していますか?だから、なぜあなたはこれを持っていますか?どちらのスレッドも異なるロックを持っています。とった? –