2014-12-19 4 views
0

Если вы используете несколько потоков с одинаковым приоритетом, почему вам не нужно вызывать метод yield или sleep в любом из потоков? Должно быть, я неправильно понял, как работает нить. Я был в предположении, что если два потока имеют один и тот же приоритет, один завершит работу до того, как другой будет запущен в одной базовой системе. То есть, если вы не вызываете одну из функций управления, то есть.) Yield() sleep() join() ... ectПриоритеты многопоточности Java

Любой, кто знает эту тему, я был бы признателен за любые разъяснения, которые могут возникнуть у меня.

StackOverflow не позволил бы мне добавить комментарий к вашему ответу:

Кроме того, согласно моей книге:. «Виртуальная машина Java всегда выбирает текущую исполняемую нить с наивысшим приоритетом Меньшее приоритет потока может работать только тогда, когда не выше -практические потоки.

+0

Даже если у вас есть одно ядро, это ядро ​​может обрабатывать несколько потоков одновременно. –

+0

функции, о которых вы упоминали, используются для предотвращения взаимоблокировки. Нити не зависят от работы в противном случае. –

ответ

5

Почему вам не нужно вызывать метод доходности или сна в любом из потоков?

Планирование выполнено упреждающим образом. Вам не нужно вызывать выход или спать или ждать или вызывать операцию блокировки для ОС, чтобы приостановить поток.

Я был в предположении, что если два потока имеют один и тот же приоритет, один будет завершен до того, как другой будет запущен в одной базовой системе.

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

, если вы звоните один из управления функциями, т.е.). Выход() сон() присоединиться()

Вызов этих методов может отказаться от процессора, но это вовсе не означает, что операционная система выиграл» t подозревают нить, потому что они не были вызваны., note: им это не нужно.

+0

Эй, я не смог комментировать раньше, поэтому добавил его к моему вопросу: «Также, согласно моей книге:« JVM всегда выбирает текущий поток с наивысшим приоритетом. Поток с более низким приоритетом может выполняться только тогда, когда потоки с более высоким приоритетом не выполняются ».« Это просто некорректная информация? –

+0

@DCS_Kurtis_IT_Manager JVM не имеет права голоса при запуске потоков. ОС делает это. Возможно, речь шла о зеленых потоках, которые использовались только в Solaris до 1998 года. –

+0

Питер, читаемая мной книга, похоже, не ссылается на Solaris. Книга называется «Программирование Java». Я собираюсь сделать тестовую программу с максимальным приоритетом и самым низким приоритетом. Я позволю ему запустить некоторое время и опубликовать результаты. Спасибо за вашу помощь –

Смежные вопросы