У меня вопрос к знатокам: может ли сложиться такая ситуация, что после проверки условия if(createdThreadCount < Solution.count) планировщик потоков остановит текущий поток и продолжит выполнение другого потока? То есть условие пройдется лишний раз и получится лишний 16й поток? И вообще насколько это правильно, проверять условия и выполнять последующий код (пусть даже и из одной строки)без synchronized в случае мультипоточности и одновременного использования и изменения статичных переменных (которые по сути одни на класс)?
public class Solution {
    static int count = 15;
    static  volatile int createdThreadCount;

    public  static void main(String[] args) {
        System.out.println(new GenerateThread());
    }

    public static class GenerateThread extends Thread {

        public  GenerateThread(){
            super(String.valueOf(++createdThreadCount));
            start();
        }
        @Override
        public  void run() {

                if (createdThreadCount < Solution.count) {
                    System.out.println(new GenerateThread());
                }

        }
        @Override
        public String toString() {
            return (getName()+" created");
        }
    }
}