Менеджер безопасности Java на поток - PullRequest
0 голосов
/ 19 июля 2011

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

Можно ли прикрепить менеджер безопасности только для определенного класса потока?

-

РЕДАКТИРОВАТЬ: Используя подсказку Питера, я создал следующую переменную в моем собственном менеджере безопасности:

private static ThreadLocal<Boolean> isChatbot = new InheritableThreadLocal<Boolean>() {
  @Override protected synchronized Boolean initialValue() {
    boolean value = (Thread.currentThread() instanceof ChatBot);
    return value;
  }
  @Override protected synchronized Boolean childValue(Boolean parentValue) {
    boolean value = (Thread.currentThread() instanceof ChatBot || parentValue);
    return value;
  }
};

ChatBot - это мой определенный класс потоков, которые я хочу запускать с ограничениями. Поэтому в initialValue я даю значение «true» всем потокам ChatBot, а в childValue я также даю значение «true» всем потомкам, порожденным потоком ChatBot.

Странно, это не работает. Я установил точку останова внутри childValue и увидел, что выполнение никогда не выполняется, поэтому дочерние потоки получают значение false.

Что я делаю не так?

1 Ответ

0 голосов
/ 19 июля 2011

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

...