4. 多线程问题。(15分) 假如关羽和张飞两人参加比武招亲,满足如下要求者获胜 (1)两人依次出拳,计算出拳的耗时; (2)一共5回合,总耗时少的获胜。 提示: (1)关羽和张飞分别为一个子线程; (2)耗时:可用 100 以内随机数生成:(提示:Math.randomo方法可返回 。-1以内的随机数) (3)生成一个Yongshi 类包括如下属性:姓名,时间;方法:输出西数。 (4)输出效果:
时间: 2024-01-26 13:03:58 浏览: 71
这是一个Java多线程问题,可以利用Thread类和Random类实现。下面是一个简单的实现示例:
```java
import java.util.Random;
class Yongshi {
private String name;
private int time;
public Yongshi(String name, int time) {
this.name = name;
this.time = time;
}
public String toString() {
return name + "出拳耗时" + time + "秒";
}
public int getTime() {
return time;
}
}
public class WuLinMeng {
public static void main(String[] args) {
Thread guanyu = new Thread(() -> {
System.out.println("关羽开始出拳...");
Random random = new Random();
int total = 0;
for (int i = 1; i <= 5; i++) {
int time = random.nextInt(100) + 1;
total += time;
System.out.println("第" + i + "回合:" + new Yongshi("关羽", time));
}
System.out.println("关羽出拳结束,总耗时:" + total + "秒");
});
Thread zhangfei = new Thread(() -> {
System.out.println("张飞开始出拳...");
Random random = new Random();
int total = 0;
for (int i = 1; i <= 5; i++) {
int time = random.nextInt(100) + 1;
total += time;
System.out.println("第" + i + "回合:" + new Yongshi("张飞", time));
}
System.out.println("张飞出拳结束,总耗时:" + total + "秒");
});
guanyu.start();
zhangfei.start();
try {
guanyu.join();
zhangfei.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
int guanyuTime = guanyu.getTime();
int zhangfeiTime = zhangfei.getTime();
if (guanyuTime < zhangfeiTime) {
System.out.println("关羽获胜!");
} else if (guanyuTime > zhangfeiTime) {
System.out.println("张飞获胜!");
} else {
System.out.println("平局!");
}
}
}
```
在这个示例中,我们创建了一个Yongshi类来存储选手姓名和出拳耗时,并重写了它的toString方法。每个选手都是一个独立的线程,使用Random类生成每一回合的出拳耗时,并将它们累加得到总耗时。最后,通过调用Thread类的join方法来确保两个线程都执行完毕,然后比较它们的总耗时来决定胜负。
阅读全文