Инструменты для нахождения совместных Изменяемые данные ошибки в Java

у меня есть большой старой системы в обслуживании. Codebase использует потоки во всех местах, и эти потоки имеют много изменяемых данных. Я знаю, звучит ужасно. Во всяком случае, не отвечай "переписать весь код приложения с нуля" или я буду голосовать за вас вниз :-) я пробовал запустить некоторые инструменты статического анализа на кодовой базе, но ни один из них, кажется, уловил этот случай, который возникает много в нашей исходный код: несколько потоков чтения и записи переменных, которые не помечены как " летучие или синхронизируются. Обычно это происходит на "runFlag"-типа переменных. Примером этого является на Effective Java 2-е издание, стр. 260:

public class StopThread
{
    private static boolean stopRequested;
    public static void main(String[] args) throws InterruptedException
    {
        Thread backgroundThread = new Thread(new Runnable()
        {
            public void run()
            {
                int i = 0;
                while (!stopRequested)
                {
                    i++;
                }
            }
        });
        backgroundThread.start();
        Thread.sleep(1000);
        stopRequested = true;
    }
}

в Этом примере не завершает свою работу в ОС Windows/Linux - "сервера" параметра запуска данного Sun JVM. Итак, существует ли (полу-)автоматическая способ найти эти вопросы, или мне придется полностью полагаться на оценки кода?

Найдено 5 ответов:

Tools for finding Shared Mutable data bugs in Java

http://stackoverflow.com/questions/187004/tools-for-finding-shared-mutable-data-bugs-in-java

Посмотреть решение →