[求助] 如何判断哪一个thread先运行完?

[复制链接]
查看11 | 回复4 | 2011-11-1 16:23:26 | 显示全部楼层 |阅读模式
其实就是main()里面创建5个thread分别运行,但是想确定哪个最先运行完(也就是winner)。不知道如何实现。求助各位。
代码如下所示。

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();

}

//how to do next???

}
}
回复

使用道具 举报

千问 | 2011-11-1 16:23:26 | 显示全部楼层



回复

使用道具 举报

千问 | 2011-11-1 16:23:26 | 显示全部楼层
FYI:
1:不断检查某标志变量;
2:利用事件/回调/属性
回复

使用道具 举报

千问 | 2011-11-1 16:23:26 | 显示全部楼层
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!");

Race.isWiner(this);

}
}
public class Race {

public static boolean hasWiner;

public static void isWiner(Thread race) {

if (!hasWiner) {

System.out.println("Winer is:" + race.getName());

hasWiner = true;

}

}

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();

}


}
}
回复

使用道具 举报

千问 | 2011-11-1 16:23:26 | 显示全部楼层
设置标志位,执行结束时修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行