Я немного новичок в параллелизме (я думаю, я хорошо справляюсь с мониторами, семафорами и reentrantLocks), поэтому я не могу их использовать.
Я должен использовать любой класс или интерфейс из параллельного пакета.
Точка 1. Немногие потоки должны получить доступ к массиву и составить список его элементов (здесь я использовал атомарные переменные, в качестве указателя на массив используется атомная переменная).
Пункт 2. Здесь несколько нитей (машин) на берегу должны пересечь реку. Есть Нить, которая имитирует лодку. Когда в лодке 10 машин, она отправляется на другой берег. Эта последовательность повторяется до тех пор, пока все автомобили не пересекают реку. Я действительно не знаю, какие из них использовать здесь.
Пункт 3.- Здесь некоторые потоки должны прочитать некоторую информацию, а другие потоки должны изменить эту информацию (любое количество раз). Я считаю, что здесь я должен использовать ReadWriteLock.
Точка 4.- Проблема, подобная производителю / потребителю. Здесь я использовал BlockingQueue.
Точка 5.- Сформировать проблему, подобную обменнику, и решить ее (сделано, действительно просто ... 2 потока, обменивающихся строковой переменной).
Если у вас есть рекомендации относительно того, какой метод использовать в определенных точках (например, «Нет, используйте атомарные переменные в точке 3 и циклический барьер в точке 1»), это мне очень поможет!
Спасибо!