add missing read lock; use volatile on arrays to ensure everybody sees same version, simplify remainder of locking code and remove redundant uses of synchronize. Looks like weirdness is finally gone.