关于一个多线程的问题

今天面试遇到一关于多线程和匿名内部类的问题

[code="java"]
public class MultihreadTest {
private int a=1;

private int foo(){

    return a++;

}

public void start(){
    for(int i=0;i<5;i++){
        new Thread(){
        public  void run(){
                System.out.println(foo());
            }

        }.start();      
    }   

}
public static void main(String args[]){
    MultihreadTest a=new MultihreadTest();
    a.start();
}

}
[/code]

如何修改上面代码 使其顺序打印1,2,3,4,5

函数方法改为 private synchronized int foo() {
实现线程同步,使得每次只有一个线程可以进入函数内部

因为a++不是一个原子操作,它是由先取,然后加,最后存三步组成
任何两个线程如果出现了交叉运行,就会出现错误。。。
但是因为a++的运行时间短的无法想象了,所以程序出现错误的概率估计是1/10000吧

但如果改成这样

private int foo(){

for(int i=0;i<100;++i) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a++;
}

return a;
}
}
显然结果就出问题了,所以必须进行线程同步才能保证万无一失。。。

[quote]如何修改上面代码 使其顺序打印1,2,3,4,5 [/quote]
本来打印顺序就是1,2,3,4,5

你测试了吗?
我测了一下,好像就是可以啊!

加上yield()