Создание и управление потоками
Чем различаются Thread и Runnable?
Основные различия между
Thread
и
Runnable
:
Различия между Thread и Runnable
-
Thread:-
Класс, представляющий поток выполнения.
-
Наследование от
Threadпозволяет переопределить методrun. -
Пример использования:
class MyThread extends Thread { public void run() { System.out.println("Thread is running"); } } MyThread thread = new MyThread(); thread.start();
-
-
Runnable:-
Интерфейс, который должен реализовать класс для выполнения в потоке.
-
Позволяет реализовать многопоточность без наследования от
Thread. -
Пример использования:
class MyRunnable implements Runnable { public void run() { System.out.println("Runnable is running"); } } Thread thread = new Thread(new MyRunnable()); thread.start();
-
Каким образом можно создать поток?
Способы создания потока в Java:-
Наследование от
Thread:class MyThread extends Thread { public void run() { System.out.println("Thread is running"); } } MyThread thread = new MyThread(); thread.start(); -
Реализация интерфейса
Runnable:class MyRunnable implements Runnable { public void run() { System.out.println("Runnable is running"); } } Thread thread = new Thread(new MyRunnable()); thread.start(); -
Использование лямбда-выражения:
Thread thread = new Thread(() -> System.out.println("Lambda is running")); thread.start();
Эти три способа позволяют создать и запустить поток в Java.
В чём заключается разница между методами start() и run()?
Разница между методами
start()
и
run()
:
-
start():-
Запускает новый поток выполнения.
-
Метод
run()выполняется в контексте нового потока.
Thread thread = new Thread(() -> System.out.println("Running in new thread")); thread.start(); -
-
run():-
Выполняется в текущем потоке.
-
Не запускает новый поток.
Thread thread = new Thread(() -> System.out.println("Running in current thread")); thread.run(); -
Как работает метод Thread.join()?
Метод Thread.join() заставляет текущий поток ждать завершения другого потока.
Пример:
Thread thread = new Thread(() -> {
// Код, выполняемый в новом потоке
System.out.println("Thread is running");
});
thread.start(); // Запуск нового потока
try {
thread.join(); // Ожидание завершения нового потока
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread continues after the other thread has finished");
thread.join(): Текущий поток (например, основной поток) приостанавливается до завершенияthread.
Что значит «усыпить» поток?
“Усыпить” поток означает приостановить его выполнение на определённый период времени с помощью метода Thread.sleep(milliseconds).
Пример:
try {
Thread.sleep(1000); // Усыпить поток на 1 секунду (1000 миллисекунд)
} catch (InterruptedException e) {
e.printStackTrace();
}
- Поток приостанавливается на указанный период, после чего продолжает выполнение.