Просто выстрел в темноте, но разве для приоритезации потоков в JVM не требуется возможность настраивать приоритет потоков операционной системы?
Linux (и любая Unix-подобная ОС) ограничивает способность придавать процессам более высокий приоритет root. Я думаю, что будет подобное ограничение для потоков.
Что касается вашего описание и Закон Деметры. Используя пример из Википедии, говорят, что он предпочитает:
void exercise(const Dog& d) { return d.walk(); }
вместо:
void exercise(const Dog& d) { return d.legs.move(); }
Потому что собака должна уметь ходить, а не двигать ногами. Применив это к вашей программе D&D, мы получим что-то вроде, вместо:
bool hit_orc_with_long_sword(const Character& c, int DCValue) {
return c.D20Abilities.Strength() + d20.roll() > DCValue;
}
Prefer: skill_check (c, MeleeAttack (LongSword (), Orc ());
bool skill_check(const Character& c, const Action& a) {
return c.attempt(a);
}
//.... in class character:
bool Character::attempt(const Action& a)
{
return a.check_against(D20Abilities);
}
//.... in class Action:
bool Action::check_against(const D20Abilities& a) {
return GetRelevantStat(a) + d20.roll() > DCValue;
}
Таким образом, вместо доступа через группы свойств, персонажи знают, как выполнять действия, а действия знают, какова вероятность их успеха с определенными характеристиками. Это разделяет Пользовательский код (например, hit_orc_with_long_sword выше) не должен «указывать» Персонажу, как проверять его силу, он обрабатывается посредством взаимодействия классов, каждый из которых обрабатывает четко определенный домен.
Однако код Представленный образец выглядит так, как будто у него несколько проблем. Когда вы используете friend для чего-либо, кроме реализации определенных операторов, я считаю, что это указывает на проблему дизайна. Вы не должны перебрасывать внутреннее состояние с одного объекта на другой;объекты должны знать, как выполнять набор действий из своего внутреннего состояния и аргументов, переданных им как функции.