У меня много байтовых массивов размером 4096 (16x16x16), и я хочу редактировать их из многих потоков за один раз, есть небольшая вероятность того, что любой элемент будет написан за один раз больше, чем один поток, и почти невозможно, что за три раза он будет получать доступ к нему (одному из элементов) за один раз (писать или читать).
Но цельный массив может быть доступен многими потоками за один раз.
Это может вызвать проблемы? Если да, то как их исправить/избежать?
Я знаю, что чтение должно быть безопасным, и я слышу о некоторых проблемах с записью.
Код должен быть быстрым (в режиме реального времени), поэтому я не могу синхронизировать его, и я не могу использовать ArrayList, потому что это вызовет проблемы с памятью. (Будут такие же массивы, как и 1000-20000 (или даже больше))Java, редактирующий массив из нескольких потоков
ответ
Каждый раз, когда кто-то говорит в реальном времени в том же предложении, что и Java, он достигает моего интереса, потому что в реальном времени имеет особое значение, понять (oracle/sun есть в реальном времени jvm доступно для покупки)
Но я отвлекаю, чтение и запись массивов являются атомарными, поэтому потокобезопасными. 2 потока не могут записываться в массив одновременно, потому что операция не может быть разбита на что-либо меньшее (позволяя планировщику прерываться на полпути) Пока вы осторожны (например, не читаете значение, выполняете некоторую математику, а затем записываете он возвращается к массиву и ожидает, что значение в данном индексе останется прежним)
Итак, ничто не мешает вам сделать это, пока ваша логика вокруг него также является потокобезопасной.
- 1. Доступ массив из нескольких потоков
- 2. Java - Запись в общий массив из нескольких потоков
- 3. Синхронизация нескольких потоков Java
- 4. Синхронизация нескольких потоков JAVA
- 5. Java Swing - обновление вида из нескольких потоков
- 6. Java Многопоточность: изменение переменной из нескольких потоков
- 7. Как изменить 2D-массив из нескольких потоков без синхронизации
- 8. Выполнение нескольких потоков в Java
- 9. Как заполнить массив байтов из нескольких потоков безопасно?
- 10. pthread_cond_signal из нескольких потоков
- 11. Наполнение карты из нескольких потоков
- 12. Java: Закрытие нескольких потоков правильно
- 13. Запуск нескольких потоков в Java
- 14. Сохранение нескольких потоков в Java
- 15. обратный отсчет нескольких потоков java
- 16. Запись нескольких потоков в JAVA
- 17. rx: разворачивать массив для нескольких потоков
- 18. Ждите одного из нескольких потоков
- 19. Вызов java.util.Collections.shuffle() из нескольких потоков?
- 20. C++ Возвращаемые результаты из нескольких потоков в массив
- 21. Синхронизация потоков нескольких агентов
- 22. чтение нескольких файлов из нескольких потоков
- 23. Заполнение списка из нескольких потоков
- 24. объясняет вывод из нескольких потоков
- 25. Python, выходящий из нескольких потоков
- 26. Один XElement из нескольких потоков
- 27. Протокол Python из нескольких потоков
- 28. COM-вызовы из нескольких потоков
- 29. Ожидание задания из нескольких потоков
- 30. Вызов принять() из нескольких потоков
16x16x16 = 4096, а не 65536. – rgettman
Какое поведение вы ожидаете от своего массива, когда несколько потоков пытаются записать в одну ячейку? Здесь наверняка может быть проблема – esin88
ой, на самом деле это должно быть 4096, я думал о другой части кода, извините. – GotoFinal