【发布时间】:2015-04-29 23:52:24
【问题描述】:
您好,我有一个正在绘制图像的paint 方法,我还有另一种不断修改要绘制的图像的方法,但是我时不时地遇到并发异常。请问解决这个问题的最有效方法是什么?我知道我可以在缓冲图像上使用同步块,但它会在同步非最终变量时引发警告。
private BufferedImage img;
public void modImage(BufferedImage image) {
img = image;
}
public void paintComponent(Graphics g) {
if (img != null) {
g.drawImage(img, 0, 0, this);
}
}
【问题讨论】:
-
您可以在两个不同的缓冲区之间交替。一个用于渲染,一个用于编辑。
-
抱歉,您能否举个例子说明如何使用缓冲区实现这一目标
-
在非最终变量上同步本质上没有错。您可能将警告级别设置得过高。
-
@immibis:如果是
synchronized (img),那就有很多问题了,这就是“在缓冲图像上使用同步块”的意思。 -
@user2357112 当然,存在涉及
synchronized和非最终变量的潜在错误,但 IMO 该警告的信噪比太低了。 (为什么不是“在非最终变量上调用方法”警告?)
标签: java multithreading concurrency locks