Многопоточность - PullRequest
       10

Многопоточность

0 голосов
/ 15 октября 2010

Как я могу определить, какой поток ожидает больше времени?

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

Ответы [ 3 ]

2 голосов
/ 15 октября 2010

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

Если вместо этого вы используете Java wait () / notify (), то вы управляете тем, какие потоки уведомляются, и, таким образом, можете создать свой собственный механизм приоритетов, например, вы можете иметь простую очередь, в которую каждый поток добавляет себя до своего wait () тогда вы просто берете верхний элемент из очереди и уведомляете этот поток.

1 голос
/ 13 сентября 2012

@ djna Java не позволяет вам выбрать поток для уведомления.Если в очереди 10 потоков, любой из них может быть уведомлен.

Это можно сделать с помощью интерфейсов блокировки / условия в параллельном пакете.Здесь вы можете связать каждый из этих потоков с условием, а затем извлечь элемент из этой очереди и указать условие, которое сопоставлено с этим потоком / задачей.

1 голос
/ 15 октября 2010

Вы не должны и почти наверняка не должны этого делать.

Среда потоков будет планировать потоки для вас.

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

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

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

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