线程同步 synchronized问题

neverMortred 2015-03-30 10:37:05
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执行先后顺序,谢谢!
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-03-30
  • 打赏
  • 举报
回复
线程启动是进入准备阶段,运行与否是CPU说了算 所以线程启动后如果CPU不让它执行main线程还得继续往下走 即执行m2 方法 你如果让main线程睡会,这个时间段肯定能够让你刚刚启动那个线程运行完了 但是没这个条件,m2和m1谁先执行,这个得看CPU怎么分配的了
净净的土 2015-03-30
  • 打赏
  • 举报
回复
start()只是让线程跑起来,至于跑完没跑完它就不管了, t1.start(); t2.start(); 如果按你的思路,那么岂不是t1没跑完,t2就不能动么?显示不成立

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧