Java线程停止其他_java – 当一个线程到达目的地时,其他线程停止

我目前正致力于理解多线程的

Java概念.我经历了一个使用Tortoise和Hare示例的教程来解释多线程的概念,并且在很大程度上我理解了视频教程的语法和逻辑.在视频教程的最后,Youtuber做了一项任务,涉及将多线程应用于奥运赛道.

使用我的示例中的知识,我能够创建在循环内运行的10个线程(代表运动员),执行100次(代表100米).

我的挑战是,当线程调度员使运动员在其他9名运动员之前达到100米时,其余9个线程总是不能完成他们的比赛.在标准赛道中通常不是这种情况.一个名为Usain Bolts的线程首先达到100,这并不意味着如果Yohan Blake当时处于90米,他应该停止运行.

我也有兴趣获得每个线程的距离(注意它们都使用相同的变量),这样我就可以使用函数在比赛结束时返回每个线程的位置.

我做了什么(没有用):

1)我试图使用if else结构(包含9个“else”)

statement)将每个执行线程的距离分配给新的整数变量. (使用Thread.currentThread().getName()属性和每个线程的名称)但这对我来说效果不佳.这是尝试使用他们的距离单独为运动员提供位置,但对未完成比赛的9名运动员没有任何作用.

2)我还尝试使用ArrayList在运行时填充距离,但由于一些奇怪的原因,每次想要添加另一个距离时,它仍会覆盖距离.

以下是我的代码:

package olympics100meters;

import java.util.ArrayList;

public class HundredMetersTrackRules implements Runnable {

public static String winner;

public void race() {

for (int distance=1;distance<=50;distance++) {

System.out.println("Distance covered by "+Thread.currentThread ().getName ()+" is "+distance+" meters.");

boolean isRaceWon=this.isRaceWon(distance);

if (isRaceWon) {

ArrayList numbers = new ArrayList();

numbers.add(distance);

System.out.println("testing..."+numbers);

break;

}

}

}

private boolean isRaceWon(int totalDistanceCovered) {

boolean isRaceWon=false;

if ((HundredMetersTrackRules.winner==null)&& (totalDistanceCovered==50)) {

String winnerName=Thread.currentThread().getName();

HundredMetersTrackRules.winner=winnerName;

System.out.println("The winner is "+HundredMetersTrackRules.winner);

isRaceWon=true;

}

else if (HundredMetersTrackRules.winner==null) {

isRaceWon=false;

}

else if (HundredMetersTrackRules.winner!=null) {

isRaceWon=true;

}

return isRaceWon;

}

public void run() {

this.race();

}

}

这是我的主要方法(我把它减少到5名运动员,直到我解决问题):

public class Olympics100Meters {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

HundredMetersTrackRules racer=new HundredMetersTrackRules();

Thread UsainBoltThread=new Thread(racer,"UsainBolt");

Thread TysonGayThread=new Thread (racer,"TysonGay");

Thread AsafaPowellThread=new Thread(racer,"AsafaPowell");

Thread YohanBlakeThread=new Thread (racer,"YohanBlake");

Thread JustinGatlinThread=new Thread (racer,"JustinGatlin");

UsainBoltThread.start();

TysonGayThread.start();

AsafaPowellThread.start();

YohanBlakeThread.start();

JustinGatlinThread.start();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值