Javaで同期コードが間違った順序で出力される

BigFatProgrammer

私は現在Javaを学んでおり、同期のトピックに到達しました。

いくつかの理由で、以下のコード(The Complete Reference JAVA-Herbert Schildt 7th Edition、Pgno。239-240のコードに基づく)では、必要な出力が得られません。

コード:

package package1;
class Call{
    synchronized public void call(String msg){
        System.out.print("[" + msg);
        try{
            Thread.sleep(100);
        }catch (InterruptedException e){
            System.out.println("Interrupted Exception Caught");
        }
        System.out.println("]");
    }
}

class CallMe implements Runnable{
    String msg;
    Call target;
    Thread t;

    public CallMe(Call targ, String message){
        target = targ;
        msg = message;
        t = new Thread(this);
        t.start();
    }

    public void run(){
        target.call(msg);
    }
}

public class Synchronization {
    public static void main(String[] args) {
        Call target = new Call();
        CallMe obj1 = new CallMe(target, "Hello");
        CallMe obj2 = new CallMe(target, "Synchronized");
        CallMe obj3 = new CallMe(target, "World");

        try{
            obj1.t.join();
            obj2.t.join();
            obj3.t.join();
        }catch (InterruptedException e){
            System.out.println("Interrupted Exception Caught");
        }
    }
}

必要な出力:

[Hello]
[Synchronized]
[World]

実際の出力(2013年後半にMacbook ProでEclipseを使用しています):

[Hello]
[World]
[Synchronized]

これらのトピックの出力はすべてコンピューターごとに異なることを読みました。

なぜこれが機能しないのか誰かに説明してもらえますか?

ピーターケラー

異なるCallMeインスタンスが並行して呼び出され、それらが処理される順序が保証されていないためです。あなたが知っている唯一のことは、Call.call(String)このメソッドがあるため、それは並行して呼び出されないということですsynchronized

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java-同期されたスレッド-間違った順序で出力

分類Dev

コンソール出力が間違った順序で表示される

分類Dev

Python 3.7、非同期/待機が間違った順序で印刷される

分類Dev

VBAExcelシートが間違った順序でコピーされた

分類Dev

Postgresがレコードを間違った順序で返す

分類Dev

Python:結果が間違った順序で印刷される

分類Dev

ORDERBYを使用した場合の予期しない動作-曜日が間違った順序で出力される

分類Dev

TimerTask.run()でのコマンド実行の順序が間違っている(Javaで記述されたAndroidアプリの場合)

分類Dev

完全に間違った順序で変数を出力するエコー

分類Dev

テクスチャが間違った順序で表示される

分類Dev

ng-click関数が間違った順序で実行される

分類Dev

Javascript文字列が間違った順序で連結されている

分類Dev

XSL / XML:要素が間違った順序で配置されている

分類Dev

forループが間違った順序で印刷されています

分類Dev

間違った順序で表示されている投稿

分類Dev

コールバック関数が間違った順序で終了する

分類Dev

文字列の連結が間違った順序でエコーする

分類Dev

ソートされたファイルをMacOS Xで印刷する(順序が間違っている)

分類Dev

$ httpプロミスチェーンが間違った順序で実行されている

分類Dev

ファイルとメッセージへの追加が間違った順序で表示されるpython

分類Dev

文字列内の各文字をチェックすると、間違った順序で出力されますか?

分類Dev

printf変数を間違った順序で出力する

分類Dev

間違った順序でプロットされた2つの変数によってコード化されたポイントのggplot

分類Dev

ロガーモナドのバインド操作で出力の順序が間違っている

分類Dev

xpathによって属性が間違った順序で報告されるのはなぜですか?

分類Dev

JavaScript-Firebaseでは並べ替えられた数値が間違った順序で表示される

分類Dev

Swift:関数が間違った順序で呼び出されましたか?

分類Dev

このJavascriptコードで間違った出力が表示されたのはなぜですか?

分類Dev

FFMPEG: 画像が間違った FPS で間違ってロードされる

Related 関連記事

  1. 1

    Java-同期されたスレッド-間違った順序で出力

  2. 2

    コンソール出力が間違った順序で表示される

  3. 3

    Python 3.7、非同期/待機が間違った順序で印刷される

  4. 4

    VBAExcelシートが間違った順序でコピーされた

  5. 5

    Postgresがレコードを間違った順序で返す

  6. 6

    Python:結果が間違った順序で印刷される

  7. 7

    ORDERBYを使用した場合の予期しない動作-曜日が間違った順序で出力される

  8. 8

    TimerTask.run()でのコマンド実行の順序が間違っている(Javaで記述されたAndroidアプリの場合)

  9. 9

    完全に間違った順序で変数を出力するエコー

  10. 10

    テクスチャが間違った順序で表示される

  11. 11

    ng-click関数が間違った順序で実行される

  12. 12

    Javascript文字列が間違った順序で連結されている

  13. 13

    XSL / XML:要素が間違った順序で配置されている

  14. 14

    forループが間違った順序で印刷されています

  15. 15

    間違った順序で表示されている投稿

  16. 16

    コールバック関数が間違った順序で終了する

  17. 17

    文字列の連結が間違った順序でエコーする

  18. 18

    ソートされたファイルをMacOS Xで印刷する(順序が間違っている)

  19. 19

    $ httpプロミスチェーンが間違った順序で実行されている

  20. 20

    ファイルとメッセージへの追加が間違った順序で表示されるpython

  21. 21

    文字列内の各文字をチェックすると、間違った順序で出力されますか?

  22. 22

    printf変数を間違った順序で出力する

  23. 23

    間違った順序でプロットされた2つの変数によってコード化されたポイントのggplot

  24. 24

    ロガーモナドのバインド操作で出力の順序が間違っている

  25. 25

    xpathによって属性が間違った順序で報告されるのはなぜですか?

  26. 26

    JavaScript-Firebaseでは並べ替えられた数値が間違った順序で表示される

  27. 27

    Swift:関数が間違った順序で呼び出されましたか?

  28. 28

    このJavascriptコードで間違った出力が表示されたのはなぜですか?

  29. 29

    FFMPEG: 画像が間違った FPS で間違ってロードされる

ホットタグ

アーカイブ