需求说明:
1、3人参加300米接力跑
2、每人跑100米,换下个选手
3、每跑10米显示信息
实现思路:
1、 创建线程类Run于Runnable接口
1.1 多人共跑300米,涉及多线程共享数据
2、 实现run()方法
2.1 if判断加一个循环实现
3、 使用synchronized保证在跑步的只有一位选手,且每位选手可以跑完100米才换人
4、 实现测试类
4.1 创建3个线程模拟多个选手参加比赛
解题代码:
Run类:
package KB21.a1111;
public class Run implements Runnable{
private int allMetre = 300;
private int metre = 0;
private boolean flag ;
@Override
public synchronized void run() {
if (!flag){
runRun();
}
}
public void runRun(){
for (int i = 0; i < 10; i++) {
if (metre == 100){
metre = 0;
}
if (metre == 0){
System.out.println(Thread.currentThread().getName()+"选手拿到了接力棒!");
}
metre += 10;
allMetre -= 10;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "选手跑了" + metre + "米,总路程还剩" + allMetre +"米");
if (allMetre<=0){
System.out.println("跑完啦");
flag = true;
}
}
}
}
RunTest类:
package KB21.a1111;
public class RunTest {
public static void main(String[] args) {
Run run = new Run();
Thread thread1 = new Thread(run,"1");
Thread thread2 = new Thread(run,"2");
Thread thread3 = new Thread(run,"3");
thread1.start();
thread2.start();
thread3.start();
}
}