java 都是从main方法执行的上面说了有2个线程,但是这里就算修改线程优先级也没用优先级是在2个程序都还没有执行的时候才有先后,现茬这个代码一执行主线程main已经执行了。对于属性变量 int b =100由于使用了synchronized也不会存在可见性问题(也没有必要在说使用volatile申明)当执行1步骤的时候(Thread t = new Thread(tt);
//1)线程是new状态,还没有开始工作当执行2步骤的时候(t.start();
//2)当调用start方法,这个线程才正真被启动进入runnable状态,runnable状态表示可以执行一切准备就绪了,但是并不表示一定在cpu上面执行有没有真正执行取决服务cpu的调度。在这里当执行3步骤必定是先获得锁(由于start需要调用native方法並且在用完成之后在一切准备就绪了,但是并不表示一定在cpu上面执行有没有真正执行取决服务cpu的调度,之后才会调用run方法执行m1方法)。这里其实2个synchronized方法里面的Thread.sheep其实要不要是无所谓的估计是就为混淆增加难度。3步骤执行的时候其实很快子线程也准备好了但是由于synchronized的存茬,并且是作用同一对象所以子线程就只有必须等待了。由于main方法里面执行顺序是顺序执行的所以必须是步骤3执行完成之后才可以到4步骤,而由于3步骤执行完成子线程就可以执行m1了。这里就存在一个多线程谁先获取到问题如果4步骤先获取那么main
b=在前面,那么等于1000还是2000看情况之后b=1000是一定固定的了。