2011-02-24 5 views
1

Peut-il y avoir des problèmes à avoir une classe statique avec seulement des méthodes statiques (pas de propriétés, champs ou autre) et avoir plusieurs threads accédant à ces méthodes en même temps?Méthodes statiques et multi-threads

Répondre

0

Oui, il peut y avoir. Cela dépend de la façon dont vos méthodes sont écrites. Maintenant, s'il n'y a que des méthodes statiques, cela signifierait théoriquement un code entièrement réentrant sans problèmes.

5

Tant qu'il n'y a pas d'état partagé ou de ressources externes, alors: aucun risque. Vous avez mentionné "no fields" etc, ce qui est bon - tant qu'ils ne sont pas indirectement parler d'état partagé (peut-être via un argument commun qui n'est pas thread-safe dans ce scénario, ou par l'intermédiaire de certains autres méthodes d'utilitaire qu'il appelle, qui partagent l'état de manière désordonnée), vous devriez aller bien.

0

Potentiellement, oui.

Imaginer:

class Logger 
{ 
    WriteToLogs(string msg) 
    { 
     // Write data to file1 
     ... 

     // Write data to file2 
     ... 
    } 
} 

Maintenant, imaginez que vous avez plusieurs threads essayant d'appeler WriteToLog() en même temps. Que se passe-t-il lorsque thread2 est programmé avant que thread1 ait fini d'écrire dans les fichiers journaux? Vous pourriez vous retrouver avec toutes sortes de corruption de données dans ce cas.

Les classes et méthodes statiques n'offrent AUCUNE forme de synchronisation de thread, de verrouillage, etc., ce qui vous permet de concevoir et de mettre en œuvre.

0

Oui, par exemple, les implémentations singleton peuvent être statiques mais elles doivent implémenter des mécanismes tels que double checked locking pour éviter les problèmes de multithreading.