マルチスレッドについて勉強しています。
問題のなかで理想実行結果のコードはなんとなくそうなるのか、の程度で理解できるのですが、問題のある方のプログラムの出力に対して理解ができません。
コード下に記載した理想実行結果にするためにはヒントとしてsynchronized(System.out)を使う。とあるのですが、
問題のある方のコードの説明として、
【システムに唯一のオブジェクトであるSystem.outが開いた順に出力してしまいました。System.outは受付順に文字を出力したため、乱れた出力結果となったのです。】という説明がありました。System.outが開いた順とは、どういう順番なのでしょうか、オブジェクト指向も最近覚えたばかりでオブジェクトがnewされてからの順番でこのシステムの順序を解説していただけると大変ありがたいです。
どなたかご教授お願い致します。
※問題のある方のコード import java.io.*; public class Bank { public static void main( String args[] ) { BankWriter writer1 = new BankWriter( "W1-" ); BankWriter writer2 = new BankWriter( "W2-" ); BankWriter writer3 = new BankWriter( "W3-" ); writer1.start(); writer2.start(); writer3.start(); } } class BankWriter extends Thread { private String name = null; public BankWriter( String name ) { this.name = name; } public void run() { for (int n =0; n < 5 ; n++) { System.out.print( name + "AAA " ); System.out.print( name + "BBB " ); System.out.println( name + "CCC " ); } } } **__実行結果__** W1-AAA W2-AAA W1-BBB W3-AAA W1-CCC W2-BBB W3-BBB W2-CCC W1-AAA W2-CCC ・・・ **理想実行結果** W1-AAA W1-BBB W1-CCC W1-AAA W1-BBB W1-CCC W2-AAA W2-BBB W2-CCC W3-AAA W3-BBB W3-CCC W1-AAA W1-BBB W1-CCC ..略..
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/10 11:18