この方法は、同期が、コードは、非直列化されたスレッドの動作にランダムな結果を生成します

サンダーラジャン:

ここに私のコードは次のとおりです。

public class ThreadDemo {

public static void main(String args[]) throws Exception {
    Printer[] printers = new Printer[5];
    printers[0] = new Printer("@base");
    printers[1] = new Printer("#try");
    printers[2] = new Printer("!test");
    printers[3] = new Printer("^hello");
    printers[4] = new Printer("*world");

    for (Printer x : printers) {
        x.start();
    }

    try {
        for (Printer y : printers) {
            y.join();
        }
    } catch (InterruptedException e) {
        System.out.println(e);
    }
  }
}

class Printer extends Thread {
public Printer(String name) {
    super(name);
}

public void run() {
    print();
}

public synchronized void print() {
    for (int i = 0; i < 10; i++) {
        System.out.print(getName().charAt(0));
        try {
            sleep(100);
        } catch (InterruptedException e) {
            System.out.println(e + " occured");
        }
    }
  }
}

それは、その結果

@^!#**@^!#*#@!^@*#^!#^!*@^*@!#@!#*^@#^!*!@^#*#@*^! 

私の期待は最初に開始するスレッドに基づいて@@@@@として^^^^^すべてのシンボルをシリアル化するだろうということです。

睡眠を()を呼び出すと、他のスレッドが現在のスレッドのスリープ時間まで進行してみましょう、しかし、私はそれが同期方式の場合であってはならないと思います。

GhostCat敬礼モニカC.:

シンクロナイズドはここに遊びに来ていません。

そのキーワードは、あなたが呼び出すことができませんということになり、同じ上の方法と同じ並列内のオブジェクト。

あなたは、異なるオブジェクトでそれを呼び出しているので、結果が所定の位置にキーワードを指定せずに同じでもだろう!

(私はむしろ前提とあなたが見る結果は使用によって引き起こされるという事実であることをprintln()ここに。超迅速なすべての他の作業を行っているスレッドによって使用されたときに紹介「事実上の」同期のことを「本当に遅い」操作であること。私がしようとしています)そのことについていくつかの追加情報を見つけるために、それはもう少し時間がかかる場合があります

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223237&siteId=1