当前位置: 代码迷 >> J2SE >> 线程同步 synchronized有关问题
  详细解决方案

线程同步 synchronized有关问题

热度:35   发布时间:2016-04-23 19:55:42.0
线程同步 synchronized问题
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怎么分配的了
  相关解决方案