Нет, этот код даже не скомпилируется. Например, ваш класс «UseFrequency» имеет конструктор и метод run (), но тогда у вас есть две строки CriticalSection.freq[iFrequency] = true;
и
stop();
, которых нет ни в одном теле метода - они просто сидят там сами по себе.
Если вы получите код для компиляции, он все равно не будет работать так, как вы ожидаете, потому что у вас есть несколько потоков и отсутствует контроль параллелизма. Это означает, что разные потоки могут «наступать друг на друга» и повреждать общие данные, например, массив «freq». Каждый раз, когда у вас есть несколько потоков, вам нужно защитить доступ к общим переменным с помощью синхронизированного блока. Учебник Java по параллелизму объясняет это здесь http://java.sun.com/docs/books/tutorial/essential/concurrency/index.html