Two big steps for a thread-safe object-based app
2) Make sure that the objects interact in a thread-safe way in the application.
This was re-stated by Brian Goetz at Javapolis 2006. Brian proposed that the use of an object-oriented language, good object design, and this two-step process, do help minimize the costs of developing a thread-safe application these days.
It's just that both step 1 and 2 are relatively very expensive and often improperly done, which results in defects. The resulting total costs are comparable to and may surpass the costs of using Java EE correctly. It may be that in 2007 and 2008, the least expensive way to develop thread-safe applications is the use of Java EE version 5, possibly even for desktop apps.
TODO look into ways to use Java EE 5 on the desktop, with and without an http-based user interface (e.g., with Swing).