-4

私は同期されたステートメントで作業していて、次のプログラムを作成しました...オブジェクト参照としてこれを使用してrunnクラスを同期しました..bt smhw目的の出力はありません....

class runn extends Thread {
    String s;

    runn(String a) {
        s=a;
        start();
    }

     public void show() {
        System.out.print("["+s);
        try {
            sleep(50);
        } catch(Exception a){}

        System.out.print("]");
    }

    public void run() {
        synchronized(this) {
            show();
        }
    }
}

public class multi4 {

    public static void main(String[] args) throws InterruptedException{
        new runn("hello ");
        new runn("this is ");
        new runn("multithreading");
    }
}

出力は次のようになります。

[hello][this is][multithreading]

しかし、同期が機能していません

助けてください。

4

1 に答える 1

2

2つの間違い:

  • synchronized個々のrunnオブジェクトにあなた。各スレッドは異なる同期オブジェクトを使用するため、これは効果がありません。
  • このsynchronizedキーワードによって、魔法のようにスレッドが順番に実行されるわけではありません。同じオブジェクトで同期する場合synchronized、スレッドが同時にブロックを実行しようとするのを防ぐだけです。それらは任意の順序で実行できますが、出力をインターリーブすることはできません。つまり、共有オブジェクトを使用している場合、 eg を取得できますが、 は取得できません。synchronized[this is][hello][multithreading][this is[hello][multithreading]]
于 2013-09-01T14:14:03.433 に答える