Входной поток Java "блокировка" и многопоточность - PullRequest
3 голосов
/ 07 ноября 2011

Не могу найти ничего о «блокировке» входного потока, которая бы описывала, что это такое и когда это происходит. Является ли это каким-либо многопоточным предотвращением одновременного доступа потоков к одному и тому же потоку?

В этой заметке, когда два одновременно работающих потока обращаются к одному и тому же потоку одновременно, это может вызвать проблемы, или оба потока получают свои собственные указатели потока? Очевидно, что нужно подождать, но, надеюсь, это не приведет к непроверенному исключению.

Ответы [ 3 ]

5 голосов
/ 07 ноября 2011

«Блокировка» - это когда чтение или запись зависает, ожидая либо дополнительной информации (для чтения), либо большего пространства в некотором внутреннем буфере (для записи), прежде чем вернуть управление вызывающему потоку.

И я почти уверен, что объект потока заботится о своих собственных местах чтения / записи, поэтому указатель просто указывает на объект потока, который считывает из своего собственного буфера.Таким образом, если вы читаете с синхронизированными методами, то каждое чтение будет ждать своей очереди и получит связные (но не перекрывающиеся) данные.Если методы не синхронизированы, то я почти уверен, что весь ад вырвется на свободу.

3 голосов
/ 07 ноября 2011

В контексте входных потоков «блокирование» обычно относится к потоку, ожидающему получения большего количества данных. Этот термин, вероятно, имеет больше смысла, если вы думаете о сокетах, а не о файлах.

Если у вас есть несколько потоков, одновременно считывающих один и тот же поток, вы должны выполнить собственную синхронизацию. Не существует специфичных для потока «потоковых указателей». Опять же, подумайте о чтении нескольких потоков из одного сокета (а не из файла).

2 голосов
/ 07 ноября 2011

Каждый stream имеет указатель потока. Не имеет смысла иметь два потока, читающих один и тот же поток.

...