看看是否有任何对象java.util.concurrent
可以解决问题。它们提供比synchronized
.
例如,您可以使用 a 执行以下操作Semaphore
:
在一些共享课程中
public class Shared {
public final Semaphore mutex = new Semaphore(1);
}
在 RMI 线程中
// synchronizing with other clients...
// now we're at the critical section. Block until we have the lock
Shared.mutex.acquireUninterruptibly();
// update state
Shared.mutex.release();
// critical section over. Schedule an update on the GUI thread.
在 GUI 线程中
// if the critical section is free, check for updated state. Else, just wait
if (Shared.mutex.tryAcquire()) {
try {
// read state and update GUI
} finally {
Shared.mutex.release();
}
}
在这里,GUI 线程不能保证看到每一个更新,但如果 RMI 线程不是不断更新状态,它应该可以工作。