Я хочу вернуть пустой вектор, который можно проверить с помощью Collections.isEmpty
blockquote>Хотите ли вы вернуть пустой вектор или вы хотите, чтобы Collections.isEmpty () возвратил Значение true, если передан пустой вектор?
Как правило, возвращение пустого вектора будет означать отсутствие ошибки, но пустой результат - вам следует рассмотреть возможность создания (проверенного) исключения для ошибки - что приведет к заключению договора между методом и его звонящий яснее. Если позднее вы захотите, чтобы метод мог возвращать пустой вектор для указания пустого результата (и без ошибок), вы сможете сделать это без изменения всего вызывающего кода.
Если бы у Вас есть достаточно времени для инвестирования, я рекомендовал бы книгу "Параллелизм: Модели Состояния и Программы Java, 2-й Выпуск" Jeff Magee и Jeff Kramer, John Wiley&Sons 2006
Можно проигнорировать часть Java при использовании некоторого другого языка
Существует язык, используемый для моделирования процессов и параллельных процессов под названием FSP. Требуются некоторое время и энергию, которую инвестируют, чтобы быть опытным на языке. Существует инструмент (LTSA, оба свободны и поддерживаются плагином Eclipse или автономным приложением), который проверяет Ваши модели, и сделайте Вас симпатичной Shure, что Ваша модель корректна с точки зрения параллельного выполнения.
Перевод этого моделирует к Вашим конструкциям языка, затем просто вопрос метода программирования и немногих шаблонов разработки.
Большинством проблем учебника, как читатели-писатели, производители-потребители или шумящие философы являются все иллюстрации взаимного исключения. Я предпочел бы моделировать прототип, который является упрощенным приближением большая проблема и разрешение.
У меня есть несколько раз замеченные ситуации, где предотвращение мертвой блокировки - то, что необходимо, и меры по предотвращению мертвой блокировки используются. Это всегда - хорошая идея проанализировать, если Алгоритм банкира удовлетворил бы случаю или нет.
Я не уверен, что Вы ищете. Но в ситуации предприятия реального мира, мы обычно используем некоторую платформу обмена сообщениями, когда выполнение потребителей производителей наполняет. Tipically в Java, это - JMS. И можно использовать превосходную Платформу Spring для способствования Вам.
Полностью игнорируя Ваш запрос, я предложу, чтобы Вы посмотрели на SEDA (подготовил управляемую событиями архитектуру) как способ думать об установке многопоточного конвейера производителей и потребителей.
Честно говоря, много реальных программ многопоточности не делают намного больше, чем чтение/запись некоторого значения (или строка или интервал) - кольцевые буферы (поскольку сетевое соединение, возможно, нуждалось бы), читатели/устройства записи файлов журнала, и т.д.
На самом деле я сказал бы, что, если Вы реализуете (или находите) тело (и универсальный) кольцевой буфер, и затем выполняет всю коммуникацию от потока к потоку через те буферы как единственная контактная точка, это покроет очень значительную часть любого мультипотока, синхронизирующего Вас, возможно, должен был бы сделать. (Если Вы не работаете в совместимой модным словечком среде и должны прикрепить "предприятие", "обмен сообщениями", или безотносительно на список модного словечка..., или Вы пишете систему баз данных или операционную систему.)
(Обратите внимание, что "кольцевой буфер" справедливо термин C-centric, базируемый в относительно непосредственном управлении блоком памяти. Класс Очереди Python реализует тот же основной принцип центральным списком способом, и я уверен, что многочисленные другие языки имеют концептуально подобные конструкции под немного отличающимися именами...),
Если Вы работаете с Java вообще (и возможно даже если Вы не), необходимо определенно считать Параллелизм Java На практике.
Маленькая книга семафоров - хорошая бесплатная книга. Автор использует уникальный подход: сначала задает проблему, а затем дает подсказки перед ответом. Уровень сложности задач увеличивается постепенно, и книга написана не для какого-то конкретного языка, а охватывает общие концепции многопоточности.