Java并发异常

标签 java multithreading concurrency locks

您好,我有一个绘制图像的绘制方法,还有另一个不断修改要绘制的图像的方法,但是我时常遇到并发异常。请问解决这个问题最有效的方法是什么?我知道我可以在缓冲图像上使用同步块(synchronized block),但随后它会在同步非最终变量时发出警告。

private BufferedImage img;

public void modImage(BufferedImage image) { 
     img = image;
}

public void paintComponent(Graphics g) {
    if (img != null) {
        g.drawImage(img, 0, 0, this);
    }
}

最佳答案

你可以在实例上同步,

private BufferedImage img;

public void modImage(BufferedImage image) { 
     synchronized(this){
         img = image;
     }
}

public void paintComponent(Graphics g) {
    synchronized(this){
    if (img != null) {
        g.drawImage(img, 0, 0, this);
       }
    }
}

关于Java并发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956641/

相关文章:

javascript - 如何在jsp上显示localStorage值

java - 每当线程达到稳定状态时就发出信号终止它

java - ReentrantReadWriteLock(java)-在读取锁内嵌套写入锁

python - 我们如何调用需要协程的普通函数?

java - 如何正确使用Phaser?

java - java中的初始值之后, volatile 映射可以为空吗?

java堆大小增加

Java-同步

multithreading - 是否可以在不使用偏移量的情况下将指针存储在共享内存中?

python - Appengine Python 中的并发请求