There is just one interpretation of "thread-safe": All operations on an object are synchronized to avoid race conditions when two threads operate concurrently on an object.
Therefore it is, for instance, possible for two different threads to call, say, insert(): Locks ensure that one thread finishes the insertion before the other one is permitted to enter the critical section.
Notice, also, that a method such as fireUntilHalt() would be useless if the method would not guarantee proper synchronization while other threads (who else?) insert or modify or retract.
Mark's statement "Each of the working memory actions hold a lock, so only one thread at a time can enter." is somewhat misleading - there isn't one lock "held" by "each of the WM actions". There is one lock to be acquired and released by each action.
-W