Многопоточное программирование (класс Thread)

113
13 августа 2021, 07:00

Решил посмотреть как работает метод start(). Не нашел ни одного упоминания о методе run().

Cледовательно вопрос: Каким образом, при вызове start() срабатывает метод run()?

public synchronized void start() {
    if (threadStatus != 0)
        throw new IllegalThreadStateException();
    group.add(this);
    boolean started = false;
    try {
        start0();
        started = true;
    } finally {
        try {
            if (!started) {
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) { }
    }
}

доп. инфо: Увидел строку где находится вызов нового потока, но как в этом потоке он передает на выполнение содержимое run() - я не увидел. Может все на поверхности, но не знаю... сам не вижу связь между start() и run(), кроме как исключительно с точки зрения теории.

Answer 1

Врядли вы увидите это в рамках JRE. Потоками управляет JVM(будучи сама написанная на C++, если я ничего не путаю), она создает поток используя ресурсы ОС, и уже в рамках потока созданного ОС, прокидывает управление интерфейсу Runnable

READ ALSO
Заливка области

Заливка области

У меня есть фигура нарисованная через GeneralPath path;

244
Почему в методе main() аргумент массива строк традиционно называется “args”?

Почему в методе main() аргумент массива строк традиционно называется “args”?

Почему в методе main в языке C в роле аргументов принимаются argc и argv, а в Java - args? Как расшифровывается эта короткая форма или почему она именно...

266
Как правильно сопоставить на одну таблицу сущность разделенную на несколько классов

Как правильно сопоставить на одну таблицу сущность разделенную на несколько классов

Есть таблица на 30 и более полейЯ хочу разделить данную таблицу на несколько классов и в каждом классе по 5 полей, чтобы удобней было работать

186