日期:2014-05-20  浏览次数:20752 次

java 多线程面试题,问“最差情况下输出的是多少?”,最差的时候输出是2,能说说原理吗?
public class ThreadTest extends Thread {
public static int stal = 0;
public int flag = 0;
public void run() {
for(int i=0; i<10; i++) {
stal++;
}
flag=1;
}
public static void main (String[] args) {
ThreadTest test1 = new ThreadTest();
ThreadTest tset2 = new ThreadTest();
test1.start();
test2.start();
while(test1.flag==0 || test2.flag==0) {

}
System.out.println(ThreadTest.stal);
}
}

------解决方案--------------------
stal为2的情况可以这样发生:

第一个线程读取stal的值0后,完成了++,准备将1写回之前,
第二个线程完成了9次循环,
这时第一个线程将stal写为1,
然后第二个线程读取stal的值1后,完成了++,准备将2写回之前,
第一个线程运行直至完毕,
第二个线程将stal写为2,也结束

(对了,你这个程序中有小拼写错误,尽管不影响阅读。)