public class Mythread03 implements Runnable{
int b = 100;
public synchronized void m1(){
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
b = 1000;
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("b="+b);
}
public synchronized void m2(){
try {
Thread.sleep(4000);
b = 2000;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run(){
m1();
}
public static void main(String[] args) {
Mythread03 th = new Mythread03();
Thread t = new Thread(th);
t.start();
try { //不加这个主线程的m2比m1先执行????不太懂
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
th.m2();
System.out.println(th.b);
}
}
在加入注释和未加入注释时,有区别,why?最好能说说主线程和m1m2执行先后顺序,谢谢!
------解决思路----------------------
线程启动是进入准备阶段,运行与否是CPU说了算
所以线程启动后如果CPU不让它执行main线程还得继续往下走
即执行m2 方法
你如果让main线程睡会,这个时间段肯定能够让你刚刚启动那个线程运行完了
但是没这个条件,m2和m1谁先执行,这个得看CPU怎么分配的了