Многопоточность Flashcards

(7 cards)

1
Q

Как запустить задачу в другом потоке

A

Runnable task = () -> {
// здесь пишем код, который хотим выполнить в другом потоке
};

Thread thread = new Thread(task);
thread.start();
================================
Runnable task1 = () -> {
for (int i = 1; i <= 5; i++)
};

Runnable task2 = () -> {
for (int i = 10; i <= 14; i++) {
};

Thread th-1 = new Thread(task1);
Thread th-2 = new Thread(task2);
th-1.start();
th-2.start();
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как сообщить потоку, что мы от него хотим

A
  1. Передать экземпляр Runnable
    Thread t = new Thread(() -> println(“Hello”));
  2. Сделать наследника от класса Thread и переопределить метод run:

public class MyThread extends Thread {
public void run() {println(“Hello”); }
}
Thread thread = new MyThread();

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Запуск кода в Thread

A

thread.run() - просто выполнится код внутри метода без создания нового потока.

t.start() - создается новый поток и выполняется код из метода run()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Виды потоков

A
  1. Обычные (User Thread)
    Пока в JVM есть хотя бы один обычный поток, JVM продолжает работу.
  2. Фоновые (Daemon Thread)
    Фоновый поток, который завершится, когда завершатся все пользовательские потоки. Пример: сборщик мусора.

Признак выставляется до старта потока с помощью метода setDaemon:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Метод join()

A

Метод join() в Java используется для того, чтобы приостановить выполнение текущего потока до тех пор, пока не завершится другой поток.

Когда один поток вызывает join() для другого потока, он переходит в состояние ожидания до тех пор, пока целевой поток не завершит свою работу.

Можно добавить аргумент, сколько времени ждать.

Где используется на практике:
= Ожидание завершения работы фонового потока перед завершением программы.
= Последовательное выполнение задач, когда нужно точно дождаться окончания одной, прежде чем начать другую.
= В тестах, когда нужно дождаться завершения потока перед проверкой результата.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Метод sleep()

A

Приостанавливает выполнение текущего потока (того, в котором вызывается метод) на указанный промежуток времени, позволяя другим потокам продолжать работу.

sleep() является статическим, поэтому вызывается через класс Thread (например, Thread.sleep(1000)), а не через объект потока.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly