2015-02-25 3 views
2

У меня много байтовых массивов размером 4096 (16x16x16), и я хочу редактировать их из многих потоков за один раз, есть небольшая вероятность того, что любой элемент будет написан за один раз больше, чем один поток, и почти невозможно, что за три раза он будет получать доступ к нему (одному из элементов) за один раз (писать или читать).
Но цельный массив может быть доступен многими потоками за один раз.

Это может вызвать проблемы? Если да, то как их исправить/избежать?
Я знаю, что чтение должно быть безопасным, и я слышу о некоторых проблемах с записью.
Код должен быть быстрым (в режиме реального времени), поэтому я не могу синхронизировать его, и я не могу использовать ArrayList, потому что это вызовет проблемы с памятью. (Будут такие же массивы, как и 1000-20000 (или даже больше))Java, редактирующий массив из нескольких потоков

+1

16x16x16 = 4096, а не 65536. – rgettman

+0

Какое поведение вы ожидаете от своего массива, когда несколько потоков пытаются записать в одну ячейку? Здесь наверняка может быть проблема – esin88

+0

ой, на самом деле это должно быть 4096, я думал о другой части кода, извините. – GotoFinal

ответ

1

Каждый раз, когда кто-то говорит в реальном времени в том же предложении, что и Java, он достигает моего интереса, потому что в реальном времени имеет особое значение, понять (oracle/sun есть в реальном времени jvm доступно для покупки)

Но я отвлекаю, чтение и запись массивов являются атомарными, поэтому потокобезопасными. 2 потока не могут записываться в массив одновременно, потому что операция не может быть разбита на что-либо меньшее (позволяя планировщику прерываться на полпути) Пока вы осторожны (например, не читаете значение, выполняете некоторую математику, а затем записываете он возвращается к массиву и ожидает, что значение в данном индексе останется прежним)

Итак, ничто не мешает вам сделать это, пока ваша логика вокруг него также является потокобезопасной.

Смежные вопросы