There are many threads on SO about interrupting reading the system.in but what I am looking for here is some kind of advice as to how to best code what I am trying to achieve.
I have a getlogin()
method that needs to do the following: ask a user to input the desired login environnement details, if after 6 seconds user have not input a valid value ("live" or "test") then set userlogin variable to "test" and return it to the caller.
I have taken the following approach for the getlogin()
implementation:
launch two threads which do the following:
thread1
creates a scanner object then callsscanner.nextline()
and depending on user input set a variableuserlogin
. Interrupts thread2 before exitingthread1
.thread2
waits 6 seconds and if after thatuserlogin
is still not set, then set a default value foruserlogin
. Interruptsthread1
before exitingthread2
.
join
thread2
to stop mainThread
from returninguserlogin
as nullreturn userlogin
The problem I have with the approach is that scanner.nextline()
does not interrupt when thread2
calls thread1.interrupt
, which is why I do not join thread1
in step 2 as the main Thread
would hang.
Is there a way to get thread1
to complete after thread2
interrupts it? Or else is this approach completely overkill and there is a much simpler way to achieve the contract?