As discussed in "Java Threads In The Solaris Environment - Earlier Releases* ", performance is increased dramatically by using native threads. Green threads are not time-sliced and may require calls to Thread.yield()
in loops, slowing execution. Other techniques to avoid:
Overuse of synchronization increases the possibility of deadlock (due to coding errors) and increases the likelihood of delays due to lock contention. Also, the overhead of synchronizing might frequently overcome the advantages. Minimizing synchronization may take work, but can pay off well.
Polling: it is only acceptable when waiting for outside events and should be performed in a "side" thread. Use wait()/notify() instead.