Two events coincided for me recently. I was discussing a problem where an application was tanking from time to time, and after WAY too much debugging the problem was due to thread contention.
It only showed up in production.
Worked fine in development.
Why? production was running on a multi-way box.
A few days later I heard Brian Goetz (concurrency expert) talking about the Java memory model, its flaws, and the issues that are going to come out with the new wave of multicore processors.
A lot of Java code is running just fine now AS A SIDE EFFECT. We miss a bit of this, and a bit of another, but it still manages to work. However, in the world of multicore, a lot of these problems will come out of the dark and bite us.
Are you ready for this? We really need tools to come in and help us out.