Re-creating threading and concurrency knowledge in increasingly popular languages
I think the answer is both yes and no.  Java arguably has the most well-defined memory model and execution semantics of the most commonly used imperative languages (Java, C++, Python, Ruby, etc).  In some sense, other languages either lack this completely or are playing catch-up (if that's even possible given the immaturity of the threading models).  
C++ is probably the notable exception - it has been treading the same ground for C++0x and has possibly gone beyond the current state of the Java model from my impression.
I say no because the communities are not isolated.  Many of the guys working on this stuff are involved (at least from a guidance point of view, if not from a direct hand in the specs) in more than one language.  So, there is a lot of crosstalk between guys working on JMM and guys working on C++0x specs as they are essentially solving the same problems with many of the same underlying drivers (from the hardware guys at the bottom and the users at the top).  And I'm pretty sure there is cross-talk at some level between the JVM / CLR camps as well.  
As others have mentioned, there are also other models for concurrency:  actors in Erlang and Scala, agents/STM in Clojure, FP's rise in F#, Scala, Haskell, the CCR and PLINQ stuff in CLR land, etc.  It's an exciting time right now!  We can use as many concurrency experts as we can find I think.... :)
I am primarily a Java developer, and I've been reading a lot of in-depth work on threads and concurrency.  Many very smart people (Doug Lea, Brian Goetz, etc) have authored books on these topics and made contributions to new concurrency libraries for Java.
As I start to learn more about Python, Ruby, and other languages, I'm wondering: does all of that work have to be re-created for these languages?
Will there be, or does there need to be, a "Doug Lea of Python," or a "Brian Goetz of Ruby," who make similarly powerful contributions to the concurrency features of those languages?  
Does all of this concurrency work done in Java have to be re-created for future languages?  Or will the work done in Java establish lessons and guidance for future languages?