关于#java#的问题:线程的start方法放的位置不一样,为什么造成的结果也会不一样

static int a = 0;

 Thread thread = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a++;
                }
        });

      **  thread.start();**
        Thread thread1 = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a--;
                }
        });
        thread1.start();
        thread.join();
        log.debug("a1===>"+a);
        thread1.join();
//打印结果:
  a1===>10000
----------------------------------------------------------------------------

Thread thread = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a++;
                }
        });

        Thread thread1 = new Thread(() -> {
                for (int i = 0; i < 10000; i++) {
                    a--;
                }
        });
       ** thread.start();**
        thread1.start();
        thread.join();
        log.debug("a1===>"+a);
        thread1.join();

运行两个线程时,为什么thread.start()这段代码放的位置不同,打印的结果有差异呢。
第一个代码快运行时不会有线程安全问题; 第二个却存在线程安全问题

同一个地方,创建两个线程,多运行,你回发现,结果也不一样,这个是线程运行的速度,以及响应计算的速度决定的