gpt4 book ai didi

java - BufferedImage 的后台创建以及与信号量的同步

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:59 27 4
gpt4 key购买 nike

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

Actions in a thread prior to calling a "release" method such as release() happen-before actions following a successful "acquire" method such as acquire() in another thread.

请告诉我我是否正确。

最佳答案

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

关于java - BufferedImage 的后台创建以及与信号量的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19587207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com