Я с многопоточностью плаваю на базовом уровне и знаю оператор synchronized, но он только регулирует очередность использования объекта класса "вне" потоков, которые к нему обращаются. А мне нужно, чтобы потоки брали объект не из самого класса, а последовательно друг из друга по мере обработки объекта предыдущим потоком. Это как-то можно реализовать? Как?
Идея следующая:
public static void main(String[] args){ int len = 715000000; Thread t1 = new Thread( () -> { int nums[] = new int[len]; for(int i = 0; i < len; i++) nums[i] = i + 2; }); Thread t2 = new Thread( () -> { for(int i = 0; i < len; i++) nums[i] *= 3; // на каждой итерации значение nums[i] берется из t1 }); Thread t3 = new Thread( () -> { for(int i = 0; i < len; i++) nums[i] -= 10; // на каждой итерации значение nums[i] берется из t2 }); t1.start(); t2.start(); t3.start(); if (t1.isAlive()) t1.join(); if (t2.isAlive()) t2.join(); if (t3.isAlive()) t2.join(); long sum=0; for(int i=0; i < nums.length; i++) { sum += nums[i]; } System.out.println(sum); }
Забить и выполнить последовательно не вариант. Если поможет, я могу утверждать, что по времени выполнения одного цикла в каждом потоке зависимость такая: t1 < t2 < t3.