Для академических целей (читай: университетский курс) Я создаю приложение, которое загружает и выполняет код, представленный студентами.
Каждый учащийся представляет файл .class, который загружается, создается с помощью отражения и затем выполняется в своем собственном потоке. Пользовательский менеджер безопасности используется для запрета доступа к классам и методам вне белого списка. Что еще возможно, так это бесконечные циклы в студенческом коде. Я хотел бы иметь возможность тайм-аута потоков, выполняющих код студента, и я не могу полагаться на то, что они сами реализуют эту функциональность.
В Java 7 я мог бы использовать Thread.kill (), но этот метод неболее доступный после java 8. Мне понадобится другой способ принудительно уничтожить поток, выполняющий произвольный неизвестный код, который может содержать бесконечные циклы.
Если есть какой-то изящный трюк, о котором я не знаю, пожалуйста, сообщите мне. Большое спасибо.
Редактировать:
Приложение моделирует мультиагентную систему, в которой учащиеся представляют реализации агента внутри системы. Взаимодействия между агентами (реализуемые посредством доступа к закрытым для пакета полям суперкласса) должны быть возможны без необходимости того, чтобы учащиеся реализовывали какой-либо интерфейс командной строки. Насколько мне известно, это исключает запуск кода ученика в отдельном процессе, а не в потоке.