java - 我如何区分这场线程竞赛中的获胜者?
问题描述
我一直在为我所在的一个班级编写比赛代码,该班级有两条线,一只乌龟和一只野兔。我可以让他们两个都跑 80 个单位,但我不知道如何编写代码来确定和输出谁是赢家。任何帮助将不胜感激,因为我对编码非常陌生。
我有乌龟、野兔和raceParticipant 类。我的驱动程序类看起来像这样,我会假设我把获胜者代码放在哪里?
package Domain;
public class Driver
{
public static void main(String[] args)
{
Hare bob = new Hare();
Tortoise fred = new Tortoise();
int winDistance = 80;
do {
bob.sprint();
fred.sprint();
bob.display();
fred.display();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}while(bob.getTotalDistance() < winDistance && fred.getTotalDistance() < winDistance);
}
}
我的冲刺方法是
public int sprint()
{
int sleep = generator.nextInt(100);
int sprintDistance = 0;
if (sleep > sleepPercent)
{
sprintDistance = generator.nextInt(topSpeed) + 1;
}
totalDistance +=sprintDistance;
return sprintDistance;
}
解决方案
我没有看到您在任何地方创建新线程。
您可以像这样创建一个Hare
类:
public class Hare implements Runnable {
private static final int SLEEP_DURATION = 3000; //milliseconds
private static final int SPEED = 3; //units per second
private int distanceToRun;
private final RaceFinishListener listener;
public Hare(int distanceToRun, RaceFinishListener listener) {
this.distanceToRun = distanceToRun;
this.listener = listener;
}
@Override
public void run() {
do {
distanceToRun -= SPEED;
try {
Thread.sleep(SLEEP_DURATION);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (distanceToRun > 0);
listener.onRaceFinished(getClass().getSimpleName());
}
}
Tortoise
以及具有这些变量的类似类:
private static final int SLEEP_DURATION = 1000; //sleeps less
private static final int SPEED = 1; //but is slow
然后创建一个侦听器以在有人完成时收到通知:
public interface RaceFinishListener {
void onRaceFinished(String finisher);
}
最后是你的主要课程:
public class Test implements RaceFinishListener {
private String winner;
private static final int DISTANCE_TO_RUN = 10;
public static void main(String[] args) {
new Test().race();
}
private void race() {
Hare bob = new Hare(DISTANCE_TO_RUN, this);
Tortoise fred = new Tortoise(DISTANCE_TO_RUN, this);
new Thread(bob).start();
new Thread(fred).start();
}
@Override
public void onRaceFinished(String finisher) {
synchronized (this) {
if (winner == null) {
winner = finisher;
System.out.println(finisher + " is the winner!");
} else {
System.out.println(finisher + " lost.");
}
}
}
}
输出
乌龟是赢家!
野兔迷路了。
推荐阅读
- asp.net - 从网站 URl 中删除虚拟目录名称
- java - java中的所有类都属于Object Class,那么为什么一个类不能是静态的
- ios - 调用协议的变异函数产生“没有成员'functionName'”错误
- python - 从python中深度嵌套的字典中获取值
- ruby-on-rails - 无法执行上帝命令
- javascript - angular 6 如果 ID 匹配,则合并两个数组,并显示第一个数组中的所有数组
- java - 如何覆盖从父复杂类型继承的元素类型?
- regex - 没有特定单词的正则表达式匹配
- java - 绘制未按预期绘制矩形
- postgresql - 是否跨 CTE 优化了对 STABLE 函数的多次调用?