Effectively mapping linguistic abstractions for message-passing concurrency to threads on the Java virtual machine