Скажем, я даюсь функциюЯ не понимаю темы
Data[] foo(double[] someNumbers, Data[] someData, AnalyzeTool tool, int numOfThreads)
, массива, имеющих одинаковую длину LEN.
Теперь я хотел бы вызвать потоки numOfThreads в методе, используя инструмент для обработки каждого объекта Data.Object и записать его один из другого в Data [], чтобы данные Data [] были заданы и данные [] записаны в порядке.
Предположим, что поток завершен, обрабатывая один объект данных, как я могу сообщить этому потоку, что все еще остались данные, которые еще не обработаны и не назначены, и «заблокировать» следующий объект данных для его обработки? «Блокировка» должна препятствовать обработке данных в нескольких объектах несколькими потоками.
Есть ли у кого-нибудь пример, как это сделать? Радует любая конструктивная помощь.
Это хороший учебник по ниткам. Речь идет о потоках POSIX, поэтому синтаксис не будет применяться к 'java', но понятия одинаковы независимо от того, на каком языке вы находитесь: https://computing.llnl.gov/tutorials/pthreads/ – yano
Возьмите посмотрите ['ExecutorService'] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html), [' Executors'] (https://docs.oracle .com/javase/7/docs/api/java/util/concurrent/Executors.html) и ['Future'] (https://docs.oracle.com/javase/7/docs/api/java/util/ concurrent/Future.html) в пакете java.util.concurrent. –
Каждый поток должен знать свою позицию в списке данных, а также длину списка. Вот как они узнают, что остались данные. Кроме того, я не уверен, что вы полностью понимаете термин «блокировка» в этом контексте потоковой передачи. –