вы должны синхронизировать ваши потоки для входов.
но синхронизированная строка и все ваши потоки проверяют эту строку перед тем, как что-либо читать
так что если эта строка имеет значение "e", то поток завершит ее сам. если не просто прочитать ввод, но значение в строке и продолжить.
убедитесь, что эта строка синхронизирована, и я хотел бы сделать ее энергозависимой
более конкретно, это плохой пример потоков! если один поток заблокирует приложение, пока пользователь не введет некоторые данные. другой поток должен ждать в очереди ожидания для большей производительности.
в этом случае все ваши потоки будут храниться в очереди готовности, и это будет использовать загрузку ЦП.
, чтобы решить эту проблему, попробуйте использовать Блокировку и Условия.
это быстрый код для решения проблемы с сокетами:
public class ThreadSandbox {
public static syncrnized boolean continueWork = true;
public static void main(String[] args) {
final Thread thread1 = new Thread(new Runnable(){
@Override
public void run()
{ while(continueWork){
try {
socket.setSoTimeout(5 *1000);
//READ str FROM SOCKET
if(str.equals("e")) {
continueWork =false;
}
} catch (TimeoutException e) {
System.err.println(e.toString());
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
});
final Thread thread2 = new Thread(new Runnable(){
@Override
public void run()
{ while(continueWork){
try {
socket.setSoTimeout(5 *1000);
//READ str FROM SOCKET
if(str.equals("e")) {
continueWork =false;
}
} catch (TimeoutException e) {
System.err.println(e.toString());
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
});
thread1.start();
thread2.start();
}
}