1

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

在调用“释放”方法之前线程中的操作,例如release() 成功的“获取”方法之后的操作,例如acquire()在另一个线程中。

请告诉我我是否正确。

4

1 回答 1

1

作为 的替代方案java.util.concurrent.Semaphore,考虑javax.swing.Timer在模型中使用 a 来定期通知观察视图,并同步访问不断演变的BufferedImage. 如果你的模型是Observable,你可以使用可选arg的 innotifyObservers()来传递边界信息。此处检查了一个完整的示例。

于 2013-10-25T11:22:11.690 回答