标题: 求助高手!一个java小程序的问题。 [打印本页] 作者: 史卜坤 时间: 2012-6-16 10:21 标题: 求助高手!一个java小程序的问题。 public class TT extends Thread {
int b = 100;
public synchronized void m1()throws Exception{
b=1000;
Thread.sleep(3000);
System.out.println("m1:"+"b="+b);
}
public void m2(){
System.out.println("m2"+b);
}
public void run(){
try {
m1();
} catch (Exception e) {
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
Thread.sleep(100);
tt.m2();
}
}
答案是 先输出m2的1000 在输出m1的1000,这里我就不懂了,int b = 100,为什么被改变了?我以为m2应该输出还是100的呢?
作者: 李盼 时间: 2012-6-16 10:43
我们来看你的函数执行循序
Test tt = new Test();
Thread t = new Thread(tt); //创建一个新的进程
t.start(); //这个就是run方法开始以一个新进程开始运行,这个时候main方法也在同时运行,是两个线程
Thread.sleep(100);//你让main方法休息了100毫秒,这个时候CPU如果本来在执行main方法的,因为没事干,就回去执行run方法,如果CUP这时候本来只执行run方法,mian方法休息也不影响他,也就是说这个时候不考虑其他程序的影响cpu是去执行run放了,那么就会把b改为1000,然后run方法开始休息3000毫秒,mian方法休息完后开始执行,这个时候b已经是1000了