Java Threads против Pthreads - PullRequest
23 голосов
/ 11 марта 2011

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

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

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

Ответы [ 3 ]

19 голосов
/ 11 марта 2011

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

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

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

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

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

4 голосов
/ 11 марта 2011

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

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

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

0 голосов
/ 08 декабря 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...