Остановитесь/Прервите потоки, заблокированные при входе ожидания от сокета

Каждый объект JavaScript имеет внутреннее свойство с именем [[Prototype]] . Если вы просматриваете свойство с помощью obj.propName или obj['propName'], и у объекта нет такого свойства - что можно проверить с помощью obj.hasOwnProperty('propName') - среда выполнения вместо этого ищет свойство в объекте, на который ссылается [[Prototype]] , Если объект-прототип также не имеет такого свойства, его прототип проверяется по очереди, таким образом обходя цепочку прототипов исходного объекта , пока не будет найдено совпадение или пока не будет достигнут его конец.

Некоторые реализации JavaScript обеспечивают прямой доступ к свойству [[Prototype]], например, через нестандартное свойство с именем __proto__. В общем, установить прототип объекта можно только во время создания объекта: если вы создаете новый объект через new Func(), свойство объекта [[Prototype]] будет установлено на объект, на который ссылается Func.prototype.

Это позволяет имитировать классы в JavaScript, хотя система наследования JavaScript, как мы уже видели, является прототипной, а не основанной на классах:

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

14
задан sanz 6 October 2012 в 06:42
поделиться

3 ответа

Thread.interrupt() should be the method you're looking for. Be sure that your input-accessing methods also check for InterruptedException and ClosedByInterruptException.

Also look at the corresponding page in the Sun Concurrency Tutorial, as another solution suggests.

8
ответ дан 1 December 2019 в 09:02
поделиться

You could simply close() the IO stream/socket from another thread. Then, you could check on a volatile boolean field if the resulting IOException is due the close or something else. I think the close might result in an java.net.SocketException: Socket closed exception.

12
ответ дан 1 December 2019 в 09:02
поделиться

Sockets allow to set a timeout via the setSoTimeout() method. This is the preferred way to stop them blocking.

Otherwise you might want to have a look at the nio package which allows for non-blocking I/O at the expense of more manual work to manage incoming and outgoing data.

5
ответ дан 1 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: