Я написал приложение Java, которое имеет несколько классов.Приложение Java блокируется в консоли
Один класс является Thread с этим методом:
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
coins = Double.valueOf(input);
maximumPrice = Double.valueOf(scanner.next());
while (!isInterrupted()) {
input = scanner.nextLine();
if ("stop".equals(input) || "sell".equals(input) || "panic".equals(input)) {
System.out.println("here");
commandRelevant = true;
commandValue = input;
interrupt();
}
if (input.contains("override")) {
commandRelevant = true;
if (input.contains("positive")) {
commandValue = "positive";
} else if (input.contains("negative")) {
commandValue = "negative";
} else if (input.contains("activate")) {
commandValue = "activate";
} else if (input.contains("unpredictable")) {
commandValue = "unpredictable";
} else {
commandValue = "neutral";
}
}
if (input.contains("setPrice")) {
commandRelevant = true;
commandValue = input;
}
}
}
Вся моя программа на самом деле работает независимо друг от друга к этому классу. Только один класс доступа этот поток класса с геттер
public boolean commandRelevant() {
return commandRelevant;
}
Моя проблема заключается в:
Когда я запускаю это приложение в моем IDE, Everythings отлично работает в течение нескольких часов. Нет ввода, ничего не будет заблокировано. Если я даю вход, мое приложение делает то, что должно.
Но как только я положил код в файле фляги, загрузите его на сервер, работающий Java версии "1.8.0_111" Java (TM) SE Runtime Environment (сборка 1.8.0_111-B14) Java HotSpot (TM) Client VM (сборка 25.111-b14, смешанный режим)
мое приложение работает, давая сказать 30 минут, а затем оно внезапно начинает блокировать без любого входа. Когда я нажимаю на командную строку и вводим, например, просто пробел, который вызывает мое приложение cotinues ... затем снова блокируется через секунду, пока я не нажму пробел или еще один ключ в командной строке. Это как заколдованный.
Кто-нибудь здесь, пожалуйста, подумайте, что может быть проблемой здесь? Это проблема VM? Я только начинаю свою программу с java -jar application.jar
Может быть проклятой ВМ. @Tom, который блокирует только отдельный поток, как и предполагалось. Он беспокоится о блокировке своего приложения (других потоков) (для которого мы не видим код). – Kayaman
@ Kayaman Ой, пропустил, что все его приложения блокируют, а не только поток. Благодарю. – Tom
Кажется маловероятным, что проблема связана с этим конкретным кодом. Вы можете использовать VisualVM для подключения к запущенному приложению на сервере и посмотреть, что происходит, когда он начинает вести себя странно. Вы также можете показать другой код, который вы видите, начинаете «блокировать». – Kayaman