J'écris un programme, où un programme crée un thread qui lit à son tour à partir d'une socket, mon problème est que lorsque deux threads sont créés, les deux lire à partir du flux de données datain. Un thread lit correctement tandis que l'autre rencontre un EOS et renvoie -1 en octets lus. J'ai synchronisé ma méthode d'exécutionEOS atteint lorsque deux threads sont lus à partir de datainputstream
Répondre
Doit être parce que le premier thread lire le flux jusqu'à EOF. Quel est le comportement attendu. Si vous voulez diviser la lecture, par exemple échangez les lecteurs après 100 octets, utilisez read(byte[] b, int off, int len) sinon lisez les données d'un fil puis partagez-le.
J'utilise cela avec 0 et 4 comme mon offset et la longueur, les threads sont démarrés simultanément et utilisent le même programme pour lire .. et aussi la lecture de la même socket, un thread reçoit les données après l'autre et l'autre thread répond à l'aide du même programme – Joy
@Joy Pourriez-vous poster la source? Peut-être que les threads ne cèdent jamais, mais c'est difficile à dire sans le code. – zeller
Ce que vous faites n'a pas de sens. Vous ne pouvez pas lire deux fois un flux, que ce soit séquentiellement ou simultanément. Dans ce cas, si le thread A lit le premier octet, le thread B ne peut pas lire le premier octet. Si le thread A lit tous les octets, le thread B ne peut en lire aucun.
ce problème se produit seulement parfois, et parfois cela fonctionne bien .. ce n'est pas un problème qui se produit tout le temps. donc je suppose que je peux le faire – Joy
@Joy au mieux vos threads lisent alternativement des nombres aléatoires d'octets du flux. Le fait de savoir si cela peut avoir un sens dépend entièrement de la façon dont vous le programmez. Vous auriez besoin de les synchroniser d'une manière ou d'une autre, à un niveau suffisamment élevé pour être sûr que chaque thread a lu ce qu'il voulait lire avant de permettre à l'autre thread de lire. Le fait que vous obteniez un comportement aléatoire indique que vous n'avez pas fait cela, et que vous ne faites que deviner que cela fonctionnera sans cela. Ça ne va pas. – EJP
- 1. Nombre d'octets lus à partir d'un tuyau
- 2. Invocation WPF à partir de deux threads
- 3. DataInputStream readByte bloqué/suspendu
- 4. Pourquoi Application_Start appelé deux fois à partir de différents threads?
- 5. Protéger un tampon de chaîne à partir de deux threads?
- 6. envoyer des messages TCP à partir de deux threads différents
- 7. C# travailler avec singleton à partir de deux threads différents
- 8. Confusion à propos de la synchronisation des threads lorsque deux threads appellent la même méthode
- 9. Android Java - DataInputStream à chaîne de Socket
- 10. DataInputStream de la prise
- 11. Facebook API retournant le nombre de threads non lus incorrect
- 12. Que dois-je prendre en compte lorsque les tests de performance DB2 sont lus et écrits?
- 13. Lecture à partir d'un fichier avec DataInputStream est très lent
- 14. Commande de lancement (phantomjs) avec deux arguments lus à partir du fichier
- 15. Prises et DataInputStream
- 16. Les caractères spéciaux ne sont pas lus correctement à partir d'un fichier JSONP
- 17. Les iCons Emoji ne s'affichent pas correctement lorsqu'ils sont lus à partir du plist
- 18. Pourquoi mes sons audio ne sont pas lus à temps?
- 19. DataInputStream collé sur readFully
- 20. Pyo - Comment lire deux fichiers audio lus à partir de la RAM séquentiellement?
- 21. Synchronisation de deux threads
- 22. L'application Silverlight ne répond pas lorsque plusieurs threads sont lancés
- 23. Les scripts shell sont-ils lus intégralement lorsqu'ils sont invoqués?
- 24. valeurs non lus correctement à partir du fichier
- 25. appSettings n'étant pas lus à partir de machine.config dans Vista
- 26. longueur variable des arguments lus à partir de variables Matlab
- 27. pourquoi les caractères spéciaux sont-ils lus faux à partir du fichier?
- 28. deux threads appellent DownloadProgressChangedEventHandler
- 29. Git joindre deux threads différents
- 30. Séquence d'exécution lorsque deux NSNotifications sont affichées
Vous ne devez lire qu'un flux à l'aide d'un fil de discussion, sous peine de créer de la confusion. Vous n'avez pas besoin de synchroniser la lecture car elle est déjà sécurisée. Si vous obtenez un '-1', cela signifie que le flux est terminé. –
La méthode de lecture bloque jusqu'à ce qu'un flux soit reçu correctement, dans ce cas il atteint EOS et renvoie -1, ce qui arrête le processus entier – Joy
ce problème n'arrive que parfois, et parfois cela fonctionne bien .. ce n'est pas un problème arrive tout le temps. – Joy