因为你主程序中有两个线程并发执行(主程序线程和线程t), 在语句t.start()执行后, 语句aa = aa + 1和System.out.println(aa)同时执行, 但由于计算机的速度很快, aa变量还没来得及完成加1, 而System.out.println(aa) 已经执行了. 所以结果有可能是0~5中的任何一个数. 但是你只要让主程序等待, 使线程t有足够的时间运行,那么得到的结果一定是5.下面对程序稍做修改, 其执行结果一定是5.public class a implements Runnable { public static int aa = 0; public void run() { for(int k=0;k<5;k++) { aa = aa + 1; } } public static void main(String[] args) { Runnable r = new a(); Thread t = new Thread(r); t.start(); try { Thread.sleep(1000); //让主程序睡眠1秒钟, 以便让线程t有足够的时间运行. } catch(Exception e) {} System.out.println(aa); } }
在语句t.start()执行后, 语句aa = aa + 1和System.out.println(aa)同时执行,
但由于计算机的速度很快, aa变量还没来得及完成加1, 而System.out.println(aa)
已经执行了. 所以结果有可能是0~5中的任何一个数.
但是你只要让主程序等待, 使线程t有足够的时间运行,那么得到的结果一定是5.下面对程序稍做修改, 其执行结果一定是5.public class a implements Runnable
{
public static int aa = 0;
public void run()
{
for(int k=0;k<5;k++)
{
aa = aa + 1;
}
}
public static void main(String[] args)
{
Runnable r = new a();
Thread t = new Thread(r);
t.start();
try
{
Thread.sleep(1000);
//让主程序睡眠1秒钟, 以便让线程t有足够的时间运行.
}
catch(Exception e)
{}
System.out.println(aa);
}
}