Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

Многопоточность Java (механизм создания отдельного/нового потока)

#java #многопоточность


Заранее скажу, что ниже будет немного воды, так как я ниже попытаюсь максимально
точно и понятно описать суть своего вопроса. 

Возможно покажется вопрос простым, но речь не о том, как можно создать поток общепринятыми
способами, и что для этого надо использовать. Мне надо понять, каким образом Java на
основе Thread-а, Runnable-а и методов run() и start() создает отдельный поток. 

В смысле, скажем, ну просто теоретический возьмем, что я захочу в один прекрасный
день написать такой класс, по подобии Thread но не наследоваться от самого Thread а
вообще отдельный класс создать, каким то образом пытаться сделать его таким же как
и Thread, чтоб он мог сам без помощи Thread и Runnable, создавать или просто помочь
создавать новые потоки, как это делает Thread вместе с Runnablе. 

Что я должен буду для этого сделать? 
Ну или просто суть вопроса: как удается Thread вместе Runnable создавать отдельный
поток? 

Мне интересует сам механизм этого процесса создания и включения в работу программы
нового потока.

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


Ответы

Ответ 1



Пожалуйста, обязательно укажите в ответе чем механизм создания нового потока отличается от создания и вызова потока метода main(). Ничем Цепочка выглядит так: - Вы пишите код, который просит JVM создать поток - JVM просит ОС создать поток - ОС создаёт поток и регулирует его исполнение. У ОС есть ресурсы CPU и она выделение их для конкретных потоков, регулирует какой поток и сколько будет занимать ресурсы. Есть "Задача об обедающих философах". Когда за ограниченные ресурсы борются несколько потребителей. Это уровень ОС, это её задача. Поэтому, решать это нужно не на Java.

Ответ 2



Если посмотреть исходники метода Thread#start, то видно, что там вызывается метод: private native void start0(); то есть запуск потока реализован как-то нативно. Если хочется написать свой класс class MyOwnBestThread, то придется использовать jni, чтобы создавать нативные потоки.

Комментариев нет:

Отправить комментарий