| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Потоки, некоторая непонятка |
| Автор: soulcub 9.7.2010, 11:40 | ||
Нашёл, как по мне, неплохой пример по приоритетам потоков.
и в том же примере написано, что в данном случае, без приоритетов потоки запускаются по-очереди и выполняются так же. То-есть на экране мы увидим нечто такое: Thread 0 started Thread 1 started Thread 2 started Thread 0 counts 0 Thread 1 counts 0 Thread 2 counts 0 Thread 0 counts 1 Thread 1 counts 1 Thread 2 counts 1 Thread 0 counts 2 Thread 2 counts 2 Thread 1 counts 2 Thread 2 counts 3 Thread 0 counts 3 Thread 1 counts 3 Thread 2 counts 4 Thread 0 counts 4 Thread 1 counts 4 По логике так и должно происходить, но у меня получается некий непонятный бред, который не поддаётся моей логике.. Выводит: Thread 0 started Thread 1 started Thread 2 started Thread 1 counts 0 Thread 1 counts 1 Thread 1 counts 2 Thread 0 counts 0 Thread 1 counts 3 Thread 0 counts 1 Thread 1 counts 4 Thread 0 counts 2 Thread 0 counts 3 Thread 2 counts 0 Thread 2 counts 1 Thread 0 counts 4 Thread 2 counts 2 Thread 2 counts 3 Thread 2 counts 4 в другой раз такое: Thread 0 started Thread 0 counts 0 Thread 1 started Thread 2 started Thread 1 counts 0 Thread 2 counts 0 Thread 0 counts 1 Thread 2 counts 1 Thread 0 counts 2 Thread 2 counts 2 Thread 0 counts 3 Thread 2 counts 3 Thread 0 counts 4 Thread 2 counts 4 Thread 1 counts 1 Thread 1 counts 2 Thread 1 counts 3 Thread 1 counts 4 Не могу понять в чём прикол. Есть догадка, что это связано с тем, что у меня проц двухядерный. Но почему оно действует именно так? Спасибо заранее. |
| Автор: AbdulBcex 9.7.2010, 12:14 | ||
Вообще по логике потокам присваиватся приоритет потока их породившего. То есть в этом примере у всех потоков приоритет один и одинаков, следовательно распределение ресурсов может происходить каждый раз совершенно по разному и могут быть разные результаты.
Кстати, в книгах обычно наоборот пишут, что результаты различаться могут. |
| Автор: soulcub 9.7.2010, 13:08 | ||
Ну ок, логика есть. Но если делаю приоритетом(немного поменяю мейн)
тут же должно быть отчётливое доминирование 2-го над 1-м, и их обоих над 0-м, верно? А выводит: Thread 0 started Thread 0 counts 0 Thread 1 started Thread 2 started Thread 2 counts 0 Thread 1 counts 0 Thread 2 counts 1 Thread 1 counts 1 Thread 1 counts 2 Thread 2 counts 2 Thread 1 counts 3 Thread 2 counts 3 Thread 1 counts 4 Thread 2 counts 4 Thread 0 counts 1 Thread 0 counts 2 Thread 0 counts 3 Thread 0 counts 4 Окей, видно что 0-й поток в аутсайдерах, как и должно быть, но ведь 2-й поток должен быть на много приоритетнее чем 1-й, а они как на равных.. 1-й даже на 2-й итерации начал обгонять 2-1. С таким раскладом приоритетность вообще теряет свой смысл.. Может я что-то не так делаю? |
| Автор: jk1 9.7.2010, 13:37 | ||
Дело в том, что выставление приоритетов само по себе ничего не гарантирует
http://www.javamex.com/tutorials/threads/priority.shtml можно почитать подробнее о том, как это на самом деле работает. |
| Автор: soulcub 9.7.2010, 19:28 |
| Та почему-то на собеседовании на работу очень спрашивали именно про приоритетность потоков) Может про то, что не следует на них полагаться он ии хотели услышать, ну да ладно) Спасибо большое за ответы, совершенствуем знания =) |