在Java中,我有2个线程都访问(不修改)相同的BufferedImage。我只是用这样的代码将缓冲图像绘制到独立的Graphics2D对象中。正在访问BufferedImage线程安全
Graphics2D g = getGraphics();
g.drawImage(myImage, 0, 0, null);
是否有任何理由需要同步访问图像?
我知道AWTEventThread不是线程安全的等我只是在后台线程中构建一些BufferedImages。
谢谢了...
在Java中,我有2个线程都访问(不修改)相同的BufferedImage。我只是用这样的代码将缓冲图像绘制到独立的Graphics2D对象中。正在访问BufferedImage线程安全
Graphics2D g = getGraphics();
g.drawImage(myImage, 0, 0, null);
是否有任何理由需要同步访问图像?
我知道AWTEventThread不是线程安全的等我只是在后台线程中构建一些BufferedImages。
谢谢了...
(你的问题实际上并不匹配在身体描述的场景的标题,所以我假设你是问关于这两种情况下...)
两个线程都只是一个访问(此时)不变的BufferedImage
不需要在它们自己之间同步。
但是,确实需要在首先创建并初始化对象的线程与随后读取该线程的任何线程之间发生先发生关系。没有那个同步点,读线程可能会看到图像数据结构的部分陈旧值。
即使在另一个只读线程,在美国东部时间所做的更改必须成为可见,这需要一些形式同步创建happens-before关系。显示了几种替代方案here。
为了澄清,在任一线程访问缓冲图像之前创建缓冲图像。他们都只是访问一个不变的缓冲图像。我问的原因是因为BufferedImage不是一个可变对象。 g.drawImage可能会修改它。我认为它不是 – awinbra 2011-06-11 18:49:49