其实就是main()里面创建5个thread分别运行,但是想确定哪个最先运行完(也就是winner)。不知道用Thread.isAlive()实现是否正确,求助各位。代码如下所示。 public class RaceCar extends Thread
{
        private int finish;
        private String name;
        
        public RaceCar(String name, int finish)
        {
                this.finish = finish;
                this.name = name;
        }
        
        public void run()
        {
                for (int index=0; index<finish; index++)
                {
                        System.out.println(name + ": " + index);
                        try 
                        {
                                Thread.sleep((long)(Math.random()*5000));
                        } 
                        catch (InterruptedException e) {
                                
                                e.printStackTrace();
                        }
                }
                
                System.out.println(name + " finished!");
        }
}public class Race {        public static void main(String[] args) 
        {
                RaceCar[] cars = new RaceCar[5];
                int finish = Integer.parseInt(args[args.length-1]);
                
                for (int index=0; index<args.length-1; index++)
                {
                        cars[index] = new RaceCar(args[index], finish);
                }
                
                for (int index=0; index<args.length-1; index++)
                {
                        cars[index].start();
                }
  
                while (true)
{
for (int index=0; index<args.length-1; index++)
{
if (cars[index].isAlive() == false)
{
System.out.println(args[index] + " is the WINNER!!!");
return;
}
}
}
        }
}

解决方案 »

  1.   

    可以的,还可以通过getState()的返回值来判断是不是Thread.State.TERMINATED
      

  2.   

    不过像你这个程序,用for来循环不太公平,假设1和2线程都结束了,那么会优先让1赢,所以应该让线程结束后触发“赢”事件,而不是去循环判断
      

  3.   

    不过像你这个程序,用for来循环不太公平,假设1和2线程都结束了,那么会优先让1赢,所以应该让线程结束后触发“赢”事件,而不是去循环判断 
      

  4.   

    自己顶一下。请问如何实现child thread结束后,通知parent thread?