Я помогаю поддерживать и строить на довольно большом графическом интерфейсе Swing с большим количеством сложного взаимодействия. Часто я нахожу, что исправляю ошибки, которые являются результатом того, что вещи попадают в нечетные состояния из-за некоторых условий гонки в другом месте кода.
По мере того, как база кода становится большой, я обнаружил, что она становится менее последовательной в отношении определения через документацию, какие методы имеют ограничения на потоки: чаще всего, методы, которые должны выполняться на Swing EDT. Точно так же было бы полезно знать и обеспечивать статическую осведомленность, о которой (наших заказных) слушателей уведомляются по EDT по спецификации.
Поэтому мне пришло в голову, что это должно быть что-то, что можно было бы легко применить с помощью аннотаций. И вот, существует хотя бы один инструмент статического анализа, CheckThread, который использует аннотации для этого. Кажется, вы разрешаете объявлять метод ограниченным конкретным потоком (чаще всего EDT) и будем указывать методы, которые пытаются вызвать этот метод, не объявляя себя как ограниченный этим потоком.
Таким образом, на поверхности это просто похоже на слабое, огромное дополнение к циклу источника и сборки. Мои вопросы:
- Есть ли какие-либо истории успеха для людей, использующих CheckThread или подобные библиотеки для обеспечения ограничений на потоки? Любые истории неудачи? Почему это произошло успешно?
- Насколько это хорошо в теории? Есть ли теоретические недостатки?
- Это хорошо на практике? Стоит ли это? Какую ценность он дал?
- Если это работает на практике, какие хорошие инструменты для поддержки этого? Я только что нашел CheckThread, но признаю, что не совсем уверен, что я ищу, чтобы найти другие инструменты, которые делают то же самое.
Я знаю, насколько это правильно для нас, зависит от нашего сценария. Но я никогда не слышал о том, чтобы люди использовали что-то подобное на практике, и, честно говоря, похоже, что он не ухватился за некоторые общие просмотры. Поэтому мне интересно, почему.