2009-12-22 5 views
1

Je possède ce problème:Java: synchronisation (Object) et RejectedExecutionException

J'ai quelques fils qui ont accès un objet avec synchronized(Object) { ... }

Mais parfois, cette exception est soulevée:

Execute: java.util.concurrent.RejectedExecutionException

Pourquoi? Et que dois-je faire avec?

Merci

+0

Utilisez-vous un Executor n'importe où ici? J'ai couru là-dessus quand mon exécuteur ne prendra pas le travail, pour une raison quelconque (la file d'attente est pleine, etc.). – Todd

Répondre

2

Cette exception est destiné à être soulevée par Executor.execute - vous devriez certainement pas être voir juste en accédant à des objets dans un bloc synchronisé. Jetez un coup d'œil au reste de la trace de la pile pour savoir exactement où elle se trouve et regardez le message pour voir si cela vous donne plus d'informations sur les raisons pour lesquelles vous l'obtenez. Comme l'a commenté Todd, cela serait généralement dû à une file d'attente de travail complète.

Par exemple, ThreadPoolExecutor lèvera cette exception si la file d'attente est utilisée pour tamponner des tâches à exécuter et refuse d'accepter plus d'éléments. Cela indique généralement que votre système est surchargé ou que vous avez mal configuré l'exécuteur.

+0

Oui, merci, je me suis trompé – Andrey