我有一个程序,我想在其中绘制不断更新的数据(顺便说一下,它是 microhpone-line-data)。数据是一个 8000 长度的双精度数组,我并不真正关心在绘制方法之间被覆盖的“丢失”数据。
在我幼稚的实现中,很明显存在同步问题,即在绘画例程正在进行时更新音频数据。
我也知道我在 Java 和它的并发包上有点过时了,但我的第一反应是在共享数据代码周围放置同步块。不出所料,这有时会阻塞图形线程,所以我认为可能有更好的方法来做到这一点。
本质上,我只是没有太多同步方面的经验,并且在某处搞砸了一些事情。我想知道对这些问题有更好理解的人是否能够提出一个更优雅的解决方案,不会阻塞图形线程?
我天真的代码:
Object lock = new Object();
double[] audio = new double[8000]
// array size is always exactly 8000
public update( double[] audio ) {
synchronized( lock ) {
this.audio=audio; // and some brief processing
}
repaint();
}
public void paint( Graphics g ) {
synchronized( lock ) {
// draw the contents of this.audio
}
}