あるスレッドで標準 i/p ストリームに値を渡し、別のスレッドで表示できるように、2 つのスレッド間で Scanner オブジェクトを共有するにはどうすればよいですか?
以下のように2つのスレッドを作成しました。
Thread1では、以下のコードを使用しました。
while(true)
{
//Thread.currentThread().sleep(5000); // if I used this it is printing ABCD
str = System1Class.scan.nextLine();
System.out.println(str);
}
Thread2では、以下のコードを使用します。
String st = "ABCD";
InputStream is = new ByteArrayInputStream(st.getBytes());
System.setIn(is);
ThreadMainClass.scan = new Scanner(System.in); // here I am trying to refresh the global object "scan"
ここで、「スキャン」オブジェクトはクラス ThreadMainClass で次のようにグローバルに作成されます。
public static Scanner scan = new Scanner(System.in);
両方のスレッドでアクセスしています。私の要件は、Thread2 から渡される Thread1 に「ABCD」を表示したいということです。スレッド 1 の行の前に Scanner オブジェクトが作成されるように遅延を設定すると、次のように表示されます。
str = System1Class.scan.nextLine();
しかし、私は2人が遅延を使用したくありません。それで、私にできる方法はありますか?Thread2から渡された瞬間に「ABCD」を表示したい。また、その間、スレッド 1 はコンソールからのデータを待つ必要があります。つまり、スレッド 1 はスレッド 2 からの通知を待つべきではありません。データが Thread2 から渡された場合は、それを取得して印刷するだけです。それ以外の場合は、コンソールからのみ待機する必要があります。
Thread2 から「スキャン」オブジェクトを更新する方法が必要だと思いますが、よくわかりません。:)
前もって感謝します