leJOS is derived from TinyVM, and a lot of the memory management and thread implementation are the same. However, things have moved on since TinyVM, and some memory management is different - e.g. dynamic stacks have been added.
Yes, you use the Java synchronized keyword.
I know about leJOS as I am currently the main developer on leJOS NXJ, and I read the code. There are a couple of books with chapters about the leJOS VM, e.g. Brian Bagnall's first book, Core Lego Mindstorms Programming, and also Programming Lego Mindstorms with Java, which Juergen Stuber contributed to.
The best experts on the areas that you are talking about are Juergen Stuber, Paul Andrews and the original developer of TinyVM and lejos - Jose Solorzano, but they are not currently active on the project.
The Java VM used by lejos NXJ is basically the same as for the RCX, but all the device driving (LCD, Sensors, Motors, USB, Bluetooth, Sound, etc.) is new. The 256kb of flash memory on the NXT means that we have been able to add a file system. The way of uploading, storing and running programs on the NXT is all different.