Как синхронизировать отдельные операции чтения/записи общих данных в Java? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Как синхронизировать отдельные операции чтения/записи общих данных в Java? [закрыто]

Сообщение Гость »


У меня есть такой код:

публичный класс Test { public static void main(String[] args) выдает ExecutionException, InterruptedException { SharedData SharedData = новые SharedData (); в то время как (истина) { // дорогостоящие вычисления, выполняемые в нескольких потоках, которые // только когда-либо *читает* SharedData Результат результата = runReadOnlyCalculationOnSeveralThreads(sharedData); // основной поток обновляет данные, но в следующий раз это произойдет // чтение должно быть актуальным для всех потоков чтения updateSharedData (sharedData, результат); } } } Существует один метод, который выполняет параллельные операции только для чтения с общим объектом данных. После завершения операций чтения. В первый раз данные обновляются в основном потоке, затем запускаются новые операции чтения и так далее.

Сначала я пытался использовать ExecutorService для параллельных вычислений:

executorService = Executors.newFixedThreadPool(4); Результат runReadOnlyCalculationOnSeveralThreads (SharedData SharedData) { List фьючерсы = новый ArrayList(); for (Param p: параметры) { Futures.add(executorService.submit(() -> вычислить(sharedData, p))); } Итоговый результат = новый Результат(); for (Future f : фьючерс) { итог.add(f.get()); } общая сумма возврата; } Поскольку потоки используются повторно, обновления данных в updateSharedData не будут видны потокам чтения на следующей итерации.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»