BufferedImage的背景创建和与信号量同步

时间:2013-10-25 10:22:01

标签: java swing concurrency semaphore bufferedimage

我有一个后台线程,以自上而下的左右方式生成图像的像素(假设java.awt.image.BufferedImage),我希望Swing gui定期绘制图像的可用部分,向用户显示进度。 据我提出的许多答案,BufferedImage不是线程安全的,所以我想知道是否可以使用java.util.concurrent.Semaphore来强制实现同步和内存一致性。在每个像素写操作之后,后台线程将在信号量上调用release(),而javax.swing.Timer将在信号量上调用drainPermits()并请求返回的像素数被绘制。我想这个方案应该有效,因为Semaphore的文档说明:

  

在调用“发布”方法之前的一个线程中的操作,例如release() 发生在之后的行为发生在另一个线程中成功的“获取”方法(例如acquire()之后

请告诉我我是否正确。

1 个答案:

答案 0 :(得分:1)

作为java.util.concurrent.Semaphore的替代方案,请考虑在模型中使用javax.swing.Timer定期通知观察视图,并同步访问不断发展的BufferedImage。如果您的模型为Observable,则可以使用arg中的可选notifyObservers()来传递边界信息。检查完整的示例here