Два верных способа создания потока в Java - это реализация интерфейса Runnable
и расширение класса Thread
. В обоих подходах мы определяем задачу, которую будет выполнять поток, и запускаем ее в отдельном потоке.
На примере интерфейса Runnable
:
public class MyRunnable implements Runnable {
public void run() {
// Код для выполнения в отдельном потоке
}
}
Runnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
Используя класс Thread
:
public class MyThread extends Thread {
public void run() {
// Код для выполнения в отдельном потоке
}
}
Thread thread = new MyThread();
thread.start();
Оба подхода имеют свои преимущества. Использование Runnable
обычно предпочтительнее, так как оно дает большую гибкость (например, класс может реализовывать несколько интерфейсов), и это более совместимо с использованием пулов потоков, таких как ExecutorService
. Однако, расширение класса Thread
может быть более удобным, если вы создаете специализированную версию потока, что требует переопределения других методов класса Thread
.
Важно помнить, что реализация или расширение интерфейса Runnable
недостаточно для создания нового потока. Нужно создать экземпляр класса Thread
и передать в него ваш Runnable
. Затем нужно вызвать метод start()
, который вызывает метод run()
в отдельном потоке. Прямой вызов метода run()
выполнит код в том же потоке, а не в новом.