Java: перехват исключений асинхронный? - PullRequest
1 голос
/ 03 мая 2010

Я спрашиваю, потому что если это не так, его можно использовать как механизм синхронизации. Я спрашиваю о Java.

Ответы [ 4 ]

6 голосов
/ 03 мая 2010

Я не уверен, что вы подразумеваете под "можно злоупотреблять как механизм синхронизации" - это не имеет смысла.

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

5 голосов
/ 03 мая 2010

JLS 11.3.2 Обработка асинхронных исключений

Большинство исключений происходят синхронно в результате действия потока, в котором они происходят, и в точке, которая указана для возможного возникновения такого исключения. Асинхронное исключение, напротив, является исключением, которое потенциально может произойти в любой момент выполнения программы.

Для создания высококачественного машинного кода необходимо правильное понимание семантики асинхронных исключений.

Асинхронные исключения редки . Они возникают только в результате:

  • Вызов stop методов класса Thread или ThreadGroup
  • Внутренняя ошибка в виртуальной машине Java

Так что нет, хотя и редко, но не вся обработка Exception является синхронной.

0 голосов
/ 03 мая 2010

Исключения возникают во время выполнения потока. Асинхронный перехват не имеет смысла, потому что поток должен обрабатывать исключение. Это не может продолжаться, пока исключение не будет поймано и обработано. Если исключение не поймано или выброшено, поток не знает, что ему нужно делать, и просто умирает, и программа может / не может вести себя неправильно.

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

Чтобы ответить на ваш вопрос, никакая ловля не является асинхронной для всех практических целей.

0 голосов
/ 03 мая 2010

Нет, это синхронно.

Попробуйте пройти по коду с помощью отладчика, вы увидите, что он выполняется строка за строкой, и не будет продолжаться, если вы прерветесь внутри catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...