Depending on the implementation of Ruby you are using, Ruby varies greatly between parallelization.
Matz's Ruby Interpreter
Uses the Global Interpreter Lock (GIL), preventing multiple threads for executing parallel. Effectively while in Ruby land there is only one thread executing at time. Native extension under certain conditions may release the GIL in MRI 1.9+, however from my understanding this is rarelly done in practice. NOTE: The GIL is sometimes referred to as the Giant VM Lock (need to find out why).
It appears as though Rubinius 2.0 provides true concurrent and parallel processing. Source
The Java Virtual Machine has a strict specification regarding threading and memory model. JRuby utilizes the underlying JVM's threading mechanisms, leaving locks and data consistency the next question. According to this article there are methods allowing for synchronization against objects to prevent corruption.