Подтвердить что ты не робот

Java Threads против Pthreads

Мне был задан этот вопрос в интервью сегодня.

"Когда мы создаем поток с pthread_create() (потоки POSIX), поток запускается сам по себе. Почему нам нужно явно вызывать start() в Java. В чем причина того, что Java не запускает поток, когда мы создайте его экземпляр".

Я был пуст, и у интервьюера было мало времени, и в конце концов он не мог объяснить мне причину.

4b9b3361

Ответ 1

В Java, который не запускает нить сразу, ведет к лучшему API. Вы можете установить свойства в потоке (daemon, priority) без необходимости устанавливать все свойства в конструкторе.

Если поток начал сразу, ему понадобится конструктор

public Thread(Runnable target, String name, ThreadGroup threadGroup, int priority, boolean daemon, ContextClassLoader contextClassLoader, long stackSize)

Разрешить установку всех этих параметров до начала потока. Свойство daemon не может быть установлено после запуска потока.

Я предполагаю, что POSIX API берет структуру со всеми свойствами потока в вызове pthread_create(), поэтому имеет смысл сразу же запустить поток.

Ответ 2

Причин много. Но я даю вам несколько:

  • Сам поток может начать выполнение перед возвратом экземпляра.
  • Контейнер-загрузчик классов ДОЛЖЕН быть установлен правильно перед запуском потока (посмотрите на предыдущую точку)
  • Перед запуском потока следует установить дополнительную конфигурацию, такую ​​как приоритет.
  • pthreads использует указатель на инициализированную структуру (структуры), поскольку java.lang.Thread не может быть правильно инициализирован в конце c-tor, см. выше пункты; прямой вызов нативного pthread_create, чтобы фактически выполнить код, не имеет смысла

Надеюсь, у вас есть идея.

Ответ 3

Что я чувствую, Java позволяет ОС планировать (запускать) поток и не разрешать пользователю, потому что ОС лучше осведомлена о среде выполнения и планировании.