Ответ 1
Поскольку вы найдете многократное повторение до бесконечности при изучении обработки сигналов в Java, вам рекомендуется избегать написания кода Java, который напрямую зависит от сигналов. Общая лучшая практика - разрешить JVM нормально выходить на ctrl + c и других сигналах, зарегистрировав вместо этого ловушку отключения. Обработка сигналов напрямую делает вашу программу Java зависимой от ОС.
Но иногда это нормально, и вы действительно, действительно, хотите обрабатывать сигналы самостоятельно.
Даже при том, что это не выставлено как часть официального API JDK, некоторая часть JVM должна обработать сигналы (для того, чтобы вызвать перехватчики завершения работы и выйти), и этот компонент - sun.misc.Signal
. Хотя это деталь реализации и поэтому может измениться, на практике это маловероятно. Если это изменится, его необходимо будет заменить эквивалентным механизмом, и, вероятно, это будет документировано в Руководстве по устранению неполадок платформы Java.
Класс родного брата sun.misc.Unsafe
широко используется и аналогично недокументирован. В настоящее время ведется активная работа по удалению этого класса, поскольку он " становится" свалкой "для нестандартных, но необходимых методов ", но текущее предложение, хотя и ограничивает некоторые нестандартные API, сохраняет оба sun.misc.Unsafe
и sun.misc.Signal
доступен по умолчанию. Более ранний план по предотвращению доступа к этим классам все равно включал бы флаг командной строки, чтобы разрешить доступ к ним для обратной совместимости.
Вкратце, хотя вы не можете полагаться на sun.misc.Signal
и должны планировать на sun.misc.Signal
что это поведение изменится, маловероятно, что это поведение изменится до JDK 10, и если это произойдет, то, возможно, будет введен новый, более совершенный механизм. или будет разумный способ повторно включить его в случае необходимости.
Однако было бы разумно разделить код, основанный на любых классах sun.misc
на как можно sun.misc
область видимости - создать API-интерфейс для обработки сигналов, чтобы вызывающим пользователям не sun.misc
напрямую взаимодействовать с sun.misc
. Таким образом, если API меняется, вам нужно всего лишь изменить реализацию вашей обертки, а не весь код обработки сигналов.