В метод run я добавил строку с значением count в данный момент времени.
@Override
        public void run() {
            do {
                synchronized (values) {
                    incrementCount();
                    System.out.println(count);
                    values[getCount()] = 1;
                }

                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                }
            } while (getCount() < 100);
        }
И заметил, что результат зависит от значения монитора.
synchronized (values)
Например если использовать, то в консоль выводится: 1 2 3 . . . 98 99 100. Однако если использовать,
synchronized (count)
то в консоль выводится что-то такое 2 4 3 1 5 6 . . . 96 94 95 97 99 98 100 И приэ этом выводится сообщение "Массив values содержит элементы неравные 1". Помогите, пожалуйста, разобраться почему так происходит.