Почему существует разница между способами прерванного и isInterrupted поведения?

Я только что прошел Javadoc для прерываний . Я получаю разницу между двумя методами класса Thread: interrupted () и isInterrupted (). Процитируем документ:

  

Когда поток проверяет прерывание, вызывая статический метод   Thread.interrupted, статус прерывания очищается. Нестатический   Метод isInterrupted, который используется одним потоком для запроса   статус прерывания другого, не изменяет статус прерывания   флаг.

Чего я не понимаю, так это почему поведение так и осталось? Есть ли какая-либо причина, по которой interrupted сбрасывает состояние текущего потока, а isInterrupted не из потока, в котором он вызывается?

4 голоса | спросил PriMe 1 Maypm18 2018, 16:18:02

2 ответа


0
---- +: = 0 =: + ---- относится только к текущей теме;это статический метод.Этот флаг удобно снимать, поскольку ожидается, что поток, выполняющий проверку, будет реагировать на прерывание и как-то с ним справляться.Если вы хотите сбросить флаг снова, это просто: просто позвоните ---- +: = 2 =: + ---- .---- +: = 3 =: + ---- не является статическим методом.Он предназначен для вызова другими потоками.Во-первых, другие потоки концептуально не должны быть в состоянии сказать ---- +: = 5 =: + ----, что он больше не прерывается.---- +: = 6 =: + ---- имеет дело с прерыванием непосредственно - другие потоки не могут сделать это от имени ---- +: = 7 =: + ---- .С точки зрения реализации, если этот метод должен очищать флаг автоматически, тогда этот check-then-reset должен быть сделан атомарным, чтобы избежать потока ---- +: = 8 =: + ----, читающего флаг передэто было сброшено.Вы должны были бы как-то поделиться этим мьютексом с самим потоком.Это сделало бы метод ---- +: = 9 =: + ---- невероятно неудобным для использования.
ответил Michael 1 Maypm18 2018, 16:37:36
0
Если вы хотите проверить, не прерывался ли поток, вызовите ---- +: = 0 =: + ---- .Если вы хотите проверить, был ли текущий поток прерван, и если это так, вы обработаете и проглотите его, позвоните ---- +: = 1 =: + ----
ответил 孙兴斌 1 Maypm18 2018, 16:54:04

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132