Do You Really Know Java?
blog.jetbrains.com
blog.jetbrains.com
The idea that you can build systems with a limited number of types and operations is workable for many kinds of programming but it is absolute death for concurrent and distributed program. If you have 100 threads and you want them all to stop for synchronization and get woken up simultaneously, Java has a primitive for that. If you take that out of the toolbox then concurrent programming is easy, if you think for moral reasons it is better to write your own, you're screwed.
When I started coding in Java I expected pthreads to 'just not work', just as I could never trust locks in POSIX. Instead of chasing CS research fads, Java has always been pragmatic. It also helps that Java has a xenophobia that distrusts native code, so Java started on day one with the concurrency features you need and a standard library you could trust 100% and led people to create a huge mass of concurrency friendly open source software in Java.
But that's how Java is different from other languages. When a difficult to fix problem turns up in Java (like the original busted memory model), Java has a solution a decade before C++. Strange and obscure problems in Java are taken seriously whereas PHP, Pyhthon and the like may have the same problem and say "come in, the water's fine"."