At least for OutputObjects it would be simpler if the interface specified that the interact method was synchronized. This would presumably means making all OpticsObjects do this. This is probably not necessary if the interact method does not affect the object's state and therefore would cause a bunch of unnecessary blocking. It would mean though that we wouldn't have to remember to synchronize those objests whose state did change.
For now, I've just added a synchronized block to imagers and spectrophotometers.