2010-04-27 9 views

Répondre

6

Eh bien, vous ne serez pas en mesure d'avoir en train d'effectuer simultanément une lecture. Cependant, vous pouvez:

  • Synchronisez toutes les lectures sur un verrou, de sorte que seul thread essaie de lire à la fois, mais ils peuvent tous lire la suite
  • Avoir un fil juste lecture, et faire il remplit une file d'attente thread-safe de quelque sorte (voir java.util.concurrent pour diverses options) dont les autres threads récupèrent des éléments.

Voulez-vous lire des lignes à la fois, ou des blocs de caractères arbitraires?

0

Si tous les threads doivent lire toutes les lignes du fichier, vous devez créer un lecteur séparé pour chaque thread. Si chaque thread traite une ligne à la fois (et l'ordre des lignes n'a pas d'importance), alors vous devriez probablement utiliser le modèle producteur/consommateur, où un seul thread lit réellement le fichier et place la charge de travail dans un BlockingQueue, tandis que d'autres threads suppriment périodiquement les charges de travail et les traitent. Notez que vous pourrez reduire le temps de verrouillage si vous lisez N lignes dans une liste, puis placez la liste dans la file d'attente de blocage, au lieu de placer chaque ligne directement dans la file d'attente, car cela permettra de lire plusieurs lignes/extrait avec une seule opération de synchronisation ... placer et supprimer chaque ligne directement dans/hors de la file d'attente sera très inefficace, surtout si le traitement est assez rapide.

Questions connexes