Доступ к потоку BufferedImage безопасен - PullRequest
4 голосов
/ 11 июня 2011

В Java у меня есть 2 потока, которые оба обращаются (не модифицируя) к одному и тому же BufferedImage.Я просто рисую буферизованное изображение в отдельные объекты Graphics2D с кодом, подобным этому.

Graphics2D g = getGraphics();
g.drawImage(myImage, 0, 0, null);

Есть ли какая-то причина, по которой мне нужно синхронизировать доступ к изображениям?

Я знаю, что AWTEventThread не является потокобезопасным и т. Д. Я просто строю некоторые BufferedImages в фоновом потоке.

Большое спасибо ...

Ответы [ 2 ]

4 голосов
/ 11 июня 2011

(Название вашего вопроса на самом деле не соответствует сценарию, описанному в теле, поэтому я предполагаю, что вы спрашиваете об обоих случаях ...)

Два потока, которые только что получили доступ(в этот момент) неизменяемый BufferedImage не должен синхронизироваться между собой.

Тем не менее, должна существовать связь «до того, как произойдет» между потоком, который сначала создал и инициализировал объект BufferedImage, и всеми потоками, которые впоследствии его читают.Без этой точки синхронизации потоки чтения могут видеть устаревшие значения для частей структуры данных изображения.

2 голосов
/ 11 июня 2011

Даже в другой ветке, доступной только для чтения, изменения, внесенные в EDT, должны стать видимыми , и для этого требуется некоторая форма синхронизации для создания -перед отношением. Здесь показаны несколько вариантов .

...