Jeg vil godt lige rette noget, jeg sagde før.
Om brugen af multiple tråde giver bedre performance er afhængig af, hvordan du designer koden.
Synkronisering er tungt, så hvis dine tråde tager alt for små opgaver via et synkroniseret kald, så spilder du mere tid end du henter ved at dele opgaven op.
Tænk på det som hvis du skal hente 500 kasser øl i Tyskland. Det tager lang tid med én bil, men hvis du har fire, så kan det gå hurtigt...medmindre de henter én kasse hver pr. tur. Hvis de til gengæld fylder bilen op for hver tur, så burde det gå hurtigere.
Hvis du skal teste de første 1.000.000 tal for, om de er primtal, så lad være med at lade hver tråd hente ét tal fra køen, teste det og så hente det næste. Hent 10.000 tal fra køen på én gang med ét synkroniseret kald. Test dem og hent så næste sæt tal, som skal testes. Det er meget bedre.
Så, det jeg mente var, hvis man gør det rigtigt, så giver multithreading bedre performance :-)
Derudover kan man undlade at bruge Javas indbyggede "synchronized" mekanisme. Jeg var til Martin Thompsons worksom om lock-free algorithms til GOTO konferencen, og det var sgu lidt af en øjenåbner. Her er en video, hvor han gennemgår noget af teorien:
http://www.infoq.com/presentations/Lock-free-Algorithms