system.inの読み取りを中断することについて、SOには多くのスレッドがありますが、ここで私が探しているのは、私が達成しようとしていることを最適にコーディングする方法に関するある種のアドバイスです。
次のことを行う必要があるgetlogin()
メソッドがあります。6秒後にユーザーが有効な値(「ライブ」または「テスト」)を入力しなかった場合、ユーザーに目的のログイン環境の詳細を入力するように依頼し、userlogin変数を「テスト」に設定します。そしてそれを発信者に返します。
私は実装のために次のアプローチを取りましたgetlogin()
:
次のことを行う2つのスレッドを起動します。
thread1
スキャナーオブジェクトを作成してから呼び出しscanner.nextline()
、ユーザー入力に応じて変数を設定しますuserlogin
。終了する前にthread2を中断しthread1
ます。thread2
6秒間待機し、userlogin
それでもまだ設定されていない場合は、のデフォルト値を設定しますuserlogin
。thread1
終了する前に中断しthread2
ます。
mainがnullとして返される
thread2
のを停止するために参加しますThread
userlogin
userloginを返す
このアプローチで私が抱えている問題は、呼び出しscanner.nextline()
時に中断しないことです。そのため、メインがハングするため、手順2に参加しません。中断した後に完了する方法はありますか?それとも、このアプローチは完全にやり過ぎであり、契約を達成するためのはるかに簡単な方法がありますか?thread2
thread1.interrupt
thread1
Thread
thread1
thread2