Ловля Ctrl+C в Java

Если a, b и p являются положительными целыми числами (предполагающий, что положительный диапазон включает эти 0 значений) тогда выражение (((a+p) < = b) & & (== 0 || a> 1) & & (b> = p)) & & ((b - (+ p) == 0), || (b - (+ p)> 1)) может быть уменьшен до ((a+p) < =b) & & (a! =1) & & ((b-(a+p))! =1)

Позволяют мне продемонстрировать его: В первой части выражения существует условие, ((a+p) < =b) , что, если оценено истинный рендеринг, верный вторая часть: ((b - (+ p) == 0) || (b - (+ p)> 1)) . Если это верно, что (b> = (a+p)) тогда (b - (a+p)) должны быть больше или равными 0 , мы должны гарантировать что (b-(a+p))! =1 . Отложите этот термин некоторое время и продолжите.

Теперь мы можем сконцентрировать наши усилия на первая часть (((a+p) < = b) & & (== 0 || a> 1) & & (b> = p)) & & ((b-(a+p))! =1)

, Если положительно тогда, что это всегда> =0 и таким образом, мы можем отбросить тест (== 0 || a> 1) если польза (a! =1), и уменьшают первую часть выражения к [1 117] (((a+p) < = b) & & (b> = p) & & (a! =1)) .

Для следующего шага сокращения можно полагать, что, если b> = (a+p) тогда, очевидно b> =p ( положительно) и выражение могут быть уменьшены до

((a+p) < =b) & & (a! =1) & & ((b-(a+p))! =1)

72
задан Joey 23 October 2009 в 07:55
поделиться

1 ответ

Вы можете прикрепить ловушку выключения к ВМ, которая запускается всякий раз, когда ВМ завершает работу:

Виртуальная машина Java выключается в ответ на два типа событий:

  • Программа завершается нормально, когда завершается последний недемонический поток или когда завершается (эквивалентно, System.exit), или

  • виртуальная машина завершает работу в ответ на прерывание пользователя, такое как ввод Ctrl + C или общесистемное событие, например, выход пользователя из системы или завершение работы системы.

Тем не менее, поток, который вы передаете в качестве обработчика завершения, должен следовать нескольким правилам, поэтому внимательно прочтите связанную документацию, чтобы избежать каких-либо проблем. Это включает обеспечение безопасности потока, быстрое завершение потока и т. Д.

Кроме того, как указывает комментатор Джеспер, хуки завершения работы гарантированно запускаются при нормальном завершении работы виртуальной машины, но если процесс виртуальной машины завершается принудительно, они этого не делают. Это может произойти, если собственный код ошибается или если вы принудительно завершаете процесс ( kill -9 , taskkill /f).

Но в этих сценариях все ставки в любом случае отключены, так что я бы не стал тратить на это много времени.

83
ответ дан 24 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

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