访问BufferedImage线程安全

时间:2011-06-11 00:35:50

标签: java graphics bufferedimage

在Java中,我有2个线程都访问(不修改)相同的BufferedImage。我只是将缓冲的图像绘制成一个单独的Graphics2D对象,其代码如下所示。

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

我需要同步访问图像吗?

我知道AWTEventThread不是线程安全的等等。我只是在后台线程中构建一些BufferedImages。

非常感谢......

2 个答案:

答案 0 :(得分:4)

(你问题的标题实际上并不符合正文中描述的情景,所以我假设你在询问这两种情况......)

刚刚访问(在那一点)不变的BufferedImage的两个线程不需要在它们之间进行同步。

但是,确实需要在首先创建和初始化BufferedImage对象的线程与随后读取它的任何线程之间存在先发生关系。如果没有该同步点,读取线程可能会看到图像数据结构部分的陈旧值。

答案 1 :(得分:2)

即使在另一个只读线程中,在EDT上进行的更改也必须变为可见,这需要一些形式的同步来创建happens-before关系。显示了几种替代方案here