Я построил класс приложения, который должен быть запущен как Thread
, и было бы неплохо услышать мнение разработчиков Java, чтобы улучшить мой стиль кодирования.Является ли моя реализация многопоточности в порядке?
Main
класс.
package com.ozankurt;
public class Main {
public static void main(String[] args) {
Application application = new Application();
application.start();
}
}
класс Применения:
package com.ozankurt;
import com.ozankurt.utilities.Input;
public class Application implements Runnable {
private CommandHandler commandHandler;
private boolean running;
private volatile Thread thread;
private String threadName = "ApplicationThread";
public Application() {
Handler handler = new Handler(this);
this.commandHandler = new CommandHandler(handler);
this.running = true;
}
public void start() {
if (thread != null) {
System.out.println(threadName + "is already running.");
if (!isRunning())
{
System.out.println("Resuming " + threadName + "...");
setRunning(true);
}
} else {
System.out.println("Starting " + threadName + "...");
thread = new Thread(this, threadName);
thread.start();
System.out.println("Started " + threadName + ".");
}
}
public void stop() {
System.out.println("Halting " + threadName + "...");
setRunning(false);
System.out.println("Halted " + threadName + ".");
}
@Override
public void run() {
while (isRunning()) {
String userInput = Input.readLine();
commandHandler.handle(userInput);
}
}
public boolean isRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
}
Я прочитал эту Java documentation о том, как остановить потоки в Java без использования stop
метода, который стал устаревшими, поскольку он может бросить несколько исключений.
Насколько я понимаю, мы не должны пытаться остановить поток, и вместо этого мы должны определить свойство, соответствующее состоянию потока.
В моем случае я определил boolean running
в моем Application
классе и, как вы можете прочитать из моего кода в методе run
я поясню проверить, если приложение running
. Это означает, что я на самом деле никогда не останавливаю поток, я удаляю его только с помощью инструкции while
. Правильно ли это объясняется в Java documentation?
Кому нужно запустить/остановить эту тему? Почему они не могут убедиться, что они только запустили один из них? Что делает приложение? Где многопоточная часть (можете ли вы запустить более одного из них? Если да, то как они все читают с Input)? Без этого не ясно, что нужно сделать. – Thilo
@Thilo Я только что обновил эту часть своего кода, можете ли вы снова проверить и посмотреть «название» моего редактирования из истории изменений. –
«Приложение» в основном ждет ввода пользователем из командной строки и соответственно выполняет соответствующую команду. –