2010-01-06 6 views
0

Je suis tombé sur un problème de performance où 880 threads font synchronized() { method() } dans le même temps et cela a conduit à un problème majeur de performance.synchronized (Object) {} problèmes

Est-il possible qu'il y ait une limite de threads en attente à synchronized()? Où puis-je obtenir la limite?

Une autre question est ce qu'il est préférable de mettre dans synchronized(?). Parce que j'ai différentes classes accédant à cette variable, donc je ne peux pas mettre synchronized(this).

+2

Pouvez-vous mieux expliquer votre contexte, et de telles méthodes. Vous utilisez peut-être la mauvaise structure de données. – notnoop

+1

880 discussions ?! Il n'est pas surprenant que vous ayez des problèmes de performance. Pourriez-vous résoudre votre problème avec moins de threads et utiliser des opérations asynchrones à la place? –

+0

Quel est le "problème majeur de performance"? 879 fils bloqués? –

Répondre

2

Il n'y a aucun moyen de limiter quoi que ce soit avec synchronisé, pour les constructions avancées de concurrence, vous devez jeter un oeil à http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html. En ce qui concerne ce que vous mettez à l'intérieur synchronisé (?), ce qui signifie sur ce que vous verrouillez, cela dépend du comportement de verrouillage que vous voulez atteindre. Si vous avez un global (par exemple public Object LOCK = new Object();) qui est accessible à partir de toutes les classes différentes, et que vous synchronisez dessus, alors toutes les classes seront verrouillées sur celui-ci.

Jetez un oeil à la java tutorial on synchronization.