|
Помогите разобраться с PipedOutputStream/PipedInputStream
|
|||
---|---|---|---|
#18+
Есть код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
1) Выполнение потока "thread2" может завершиться только когда "input.read()" вернет "-1". 2) Метод "PipedInputStream.read()" вернет -1 только в случае, когда значение переменной closedByWriter = .T.: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
3) Значение переменной closedByWriter может быть изменено только в методе PipedInputStream.receivedLast(): Код: java 1. 2. 3. 4.
4) Метод PipedInputStream.receivedLast() можно вызвать только в классе PipedOutputStream в методе PipedOutputStream.close(): Код: java 1. 2. 3. 4. 5.
5) Но метод output.close() в главном примере вызывается после того как отработают оба потока (thread1.join и thread2.join ожидают завершения выполнения потоков). Не понимаю, где у меня ошибка в рассуждениях? Каким образом PipedInputStream узнает, что данные закончились? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 14:31 |
|
Помогите разобраться с PipedOutputStream/PipedInputStream
|
|||
---|---|---|---|
#18+
Разобрался: Сначала думал, что код отрабатывает нормально, но оказалось, что этот код в любом случае бросает exception ("Write and dead" или "Pipeline broken"). Сообщение об ошибке затерялось в логах, сразу не заметил. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 16:15 |
|
|
start [/forum/topic.php?desktop=1&fid=59&tid=2120780]: |
0ms |
get settings: |
26ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 494ms |
0 / 0 |