Собственно, еще ничего не валидировал, но сразу возник вопрос - ожидал что тут вылезет за границы массива. Статический счетчик в Solution. Каждый поток его инркрементирует. Ожидал что после первого потока счетчик поползет в >104 и при обращении к массиву будет исключение, но его нет, код отработал и даже после того как по массиву прошлись 4 потока - значения в нем везде - 1, исключения не бросило. Что я упускаю?
package com.javarush.task.task17.task1722;

/*
Посчитаем
*/

public class Solution {
    public static void main(String[] args) throws InterruptedException {
        Counter counter1 = new Counter();
        Counter counter2 = new Counter();
        Counter counter3 = new Counter();
        Counter counter4 = new Counter();

        counter1.start();
        counter1.join();
        counter2.start();
        counter2.join();
        counter3.start();
        counter3.join();
        counter4.start();
        counter4.join();

        for (int i = 1; i <= 100; i++) {
            if (values[i] != 1) {
                System.out.println("Массив values содержит элементы неравные 1");
                break;
            }
        }
    }

    public static Integer count = 0;
    public static int[] values = new int[105];

    static {
        for (int i = 0; i < 105; i++) {
            values[i] = 0;
        }
    }

    public static void incrementCount() {
        count++;
    }

    public static int getCount() {
        return count;
    }

    public static class Counter extends Thread {
        @Override
        public void run() {
            do {
                synchronized (Counter.class) {
                    //incrementCount();
                    values[getCount()]++;
                    incrementCount();
                }

                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                }
            } while (getCount() < 100);
        }
    }
}