Выбор случайного потока в Java - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть три потока в моем основном классе, и если они одновременно работают, как я могу сделать вхождение каждого потока в итерации случайным?Например, у меня есть:

Поток 1

Поток 2

Поток 3

и на первой итерации это может выглядеть так: Поток 2, поток 1, поток 3 и во втором могут быть разные комбинации.

Кроме того, каждый из моих потоков имеет разный результат, в этом случае присваивается перечисление.Кроме того, каждый раз, когда эти три потока выполняются, есть другие три потока, которые сравнивают их результаты и выполняют другие исполнения на основе этого результата.Затем процесс начинается снова.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Если ваша задача не находится внутри синхронизированного метода или блока, то задачи выполняются одновременно.Нет абсолютно никакого способа управлять порядком завершения для задач, кроме как заставить поток ждать, пока другой поток не закончил, что очень неэффективно.

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

0 голосов
/ 14 декабря 2011

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

В качестве альтернативы, вы можете иметь каждый поток sleep()на случайный промежуток времени.Это должно вызвать достаточную случайность, но нельзя полагаться на производственный код, учитывая, что вы не гарантированы, что они когда-нибудь проснутся.(Вероятность того, что они это сделают, составляет 99,999999999%, но эта крошечная доля появляется намного больше, чем должна, и всегда, когда вы не можете себе этого позволить.)

Обратите внимание, что в последнем случае может получиться что-то вроде:

Тема 1

Тема 2

Тема 1

Тема 3

Тема 2

...