题目:冰球一场比赛一般分为3局,每局20分钟,中间休息15分钟。最终以射门得分多者为胜。请用Java多线程模拟中场休息结束下局开始的场景(注:为了更容易截图,可以缩短休息时间)。
嗯嗯嗯~初学,下面是我对题目尽可能的理解,有很多不足,就比如打印的结果中总有些打印两次的,不太懂,如果大佬们有办法解决 还望告知一二 ʕ•ﻌ•ʔ
import java.util.Random;
public class Runnable03 implements Runnable {
static int i = 0;
private int a_count = 1;// a队进球数量
private int b_count = 1;// b队进球数量
int sleep = 0; // 休眠时间
private String team1; // a队名字
private String team2;// b队名字
Random ran = new Random();// 创造随机休眠时间
Object b = new Object();
public Runnable03(String team1, String team2) {// 传队名字参数
this.team1 = team1;
this.team2 = team2;
}
@Override
public void run() {
long start = System.currentTimeMillis();// 线程运行开始时间
long end = 0;// 结束时间
Object ob = new Object();
boolean b = false;
synchronized (ob) {
System.out.println("第" + i + "局比赛开始\r\n-----------------------------");
while (!b) {
sleep = ran.nextInt(5); // 随机休眠时间
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
end = System.currentTimeMillis();
long i = 20 - end + start; // 剩余时间
int n = a_count - b_count; // 比较各队进球数量
b = win(i, n);// 如果有人胜利,提前结束程序
if (b)
break;
System.out.println("还剩" + i + "分钟");
if (Thread.currentThread().getName().equals(team1))
System.out.println(Thread.currentThread().getName() + "------------->" + (a_count++) + "球");// a队进球,数量加一
else
System.out.println(Thread.currentThread().getName() + "--------------->" + (b_count++) + "球");// b队进球数量加一
}
}
}
public boolean win(long m, int n) {
if (m <= 0) {// 比赛结束,比较两者进球数量确定胜利者
if (n == 0)
System.out.println("比赛结束!平局\t休息十分钟\t");
else if (n > 0)
System.out.println("胜利者:" + team1 + "\t休息十分钟\t");
else
System.out.println("胜利者:" + team2 + "\t休息十分钟\t");
return true;
}
return false;
}
public static void main(String[] args) {
;
String team1 = "陌上花开";
String team2 = "人如玉";
Runnable03 runnable03 = new Runnable03(team1, team2);
for (i = 1; i <= 3; i++) {
new Thread(runnable03, team1).start();
new Thread(runnable03, team2).start();
try {
Thread.sleep(1000);// 休息时间间隔
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
结果:
第1局比赛开始
-----------------------------
第1局比赛开始
-----------------------------
还剩20分钟
人如玉--------------->1球
还剩17分钟
陌上花开------------->1球
还剩14分钟
人如玉--------------->2球
还剩11分钟
陌上花开------------->2球
还剩9分钟
人如玉--------------->3球
还剩6分钟
陌上花开------------->3球
还剩4分钟
人如玉--------------->4球
还剩3分钟
陌上花开------------->4球
还剩2分钟
人如玉--------------->5球
胜利者:人如玉 休息十分钟
胜利者:人如玉 休息十分钟
第2局比赛开始
-----------------------------
第2局比赛开始
-----------------------------
还剩20分钟
人如玉--------------->6球
还剩15分钟
陌上花开------------->5球
还剩14分钟
还剩16分钟
人如玉--------------->7球
陌上花开------------->6球
还剩15分钟
人如玉--------------->8球
还剩11分钟
陌上花开------------->7球
还剩10分钟
人如玉--------------->9球
还剩8分钟
还剩6分钟
人如玉--------------->10球
陌上花开------------->8球
还剩8分钟
人如玉--------------->11球
还剩5分钟
陌上花开------------->9球
还剩4分钟
还剩5分钟
人如玉--------------->12球
陌上花开------------->10球
还剩2分钟
陌上花开------------->11球
胜利者:人如玉 休息十分钟
胜利者:人如玉 休息十分钟
第3局比赛开始
-----------------------------
第3局比赛开始
-----------------------------
还剩17分钟
人如玉--------------->13球
还剩17分钟
人如玉--------------->14球
还剩17分钟
人如玉--------------->15球
还剩14分钟
陌上花开------------->12球
还剩12分钟
人如玉--------------->16球
还剩10分钟
陌上花开------------->13球
还剩10分钟
人如玉--------------->17球
还剩10分钟
人如玉--------------->18球
还剩8分钟
人如玉--------------->19球
还剩8分钟
人如玉--------------->20球
还剩8分钟
人如玉--------------->21球
还剩5分钟
陌上花开------------->14球
还剩4分钟
人如玉--------------->22球
胜利者:人如玉 休息十分钟
胜利者:人如玉 休息十分钟