2017-10-06 1 views
0

J'ai un serveur avec multithreading. Chaque connexion a son propre thread. Le thread doit parfois accéder à certaines méthodes à partir d'un objet et la méthode ne peut être appelée qu'une seule fois à la fois. Alors quoi de mieux pour la performance: Juste pour créer un nouvel objet pour chaque thread quand il a besoin de l'utiliser. Ou partageant un objet global qui a des méthodes synchronisées?Performances Java Multithreading, créer un nouvel objet ou utiliser synchronisé

+0

La raison pour laquelle on est pas définitivement mieux que l'autre est parce que cela dépend la situation. – Rogue

+0

combien de frais généraux y a-t-il dans cet objet? Combien de temps les appels à cet objet prennent-ils? Combien de threads y accéder? Chaque "connexion" à ce qui a son propre fil, une base de données? Qu'est-ce que cette connexion a à voir avec l'objet? Besoin de plus de contexte pour aider. – markg

+0

-L'objet est très petit, il suffit de se connecter à FCM (Google Firebase Messaging) -Il envoi rapide de certaines données au serveur (1,5 à 2 secondes) -Je ne sais pas combien de connexions mon serveur va gérer, max . 1000 une heure de ce type. –

Répondre

3

synchronizing ne vous conduirait pas à de meilleures performances. Cela pourrait potentiellement aggraver la performance si elle n'est pas faite correctement.
Vous ne montrez aucun code, il n'y a donc aucun moyen pour nous de vous donner des conseils sur ce qu'il faut optimiser.
En règle générale:
1) Éviter tout état si possible. De cette façon synchronisé n'est pas nécessaire
2) Rendre l'état immuable si l'objet doit avoir un état. 3) Si la création de l'objet est bon marché, faites-le en utilisant (2) si possible.
4) Si la création de l'objet est lourde, regardez le motif singleton et essayez d'utiliser les verrous. sur les méthodes.

Et à propos

Chaque connexion ont son propre thread

Assurez-vous d'utiliser un pool de threads