要实现三人接力编程,你可以参考以下步骤和代码示例:
实现思路
创建线程类:
为每个选手创建一个线程类,实现Runnable接口。
共享数据:
使用共享变量来记录接力的进度。
线程同步:
使用synchronized关键字来确保在任意时刻只有一个线程可以修改接力棒的位置。
线程间通信:
通过共享变量和条件变量来协调线程间的执行顺序。
代码示例
```java
package KB21.a1111;
public class Run implements Runnable {
private int allMetre = 300; // 总距离300米
private int metre = 0; // 当前选手跑的距离
private boolean flag = false; // 标志位,用于控制线程启动
@Override
public synchronized void run() {
if (!flag) {
runRun();
}
}
public void runRun() {
for (int i = 0; i < 10; i++) {
if (metre == 100) {
metre = 0;
System.out.println(Thread.currentThread().getName() + "选手拿到了接力棒!");
}
metre += 10;
allMetre -= 10;
try {
Thread.sleep(100); // 模拟跑步时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Run run1 = new Run();
Run run2 = new Run();
Run run3 = new Run();
Thread thread1 = new Thread(run1, "甲");
Thread thread2 = new Thread(run2, "乙");
Thread thread3 = new Thread(run3, "丙");
thread1.start();
thread2.start();
thread3.start();
}
}
```
代码解释
Run类:
实现了Runnable接口,包含共享变量`allMetre`和`metre`,以及标志位`flag`。
run方法:
使用synchronized关键字确保线程安全,`runRun`方法中控制每个选手跑10米。
main方法:
创建三个Run对象和对应的线程,并启动线程。
扩展功能
如果你想要更复杂的模拟,比如每个选手有不同的速度,可以使用类似的方法,但需要更复杂的线程同步和数据共享机制。以下是一个扩展示例:
```java
package JieLiShai;
import java.util.Random;
public class RunThread implements Runnable {
private int meters = 1000; // 总距离1000米
private int speed; // 选手速度
private Random random = new Random();
public RunThread(int speed) {
this.speed = speed;
}
@Override
public void run() {
while (meters > 0) {
int distance = speed;
if (meters < distance) {
distance = meters;
}
meters -= distance;
try {
Thread.sleep(1000 / speed); // 模拟跑步时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "跑了" + distance + "米,剩余距离" + meters + "米");
}
}
public static void main(String[] args) {
RunThread run1 = new RunThread(random.nextInt(20) + 1); // 甲同学速度1-20米/秒
RunThread run2 = new RunThread(random.nextInt(18) + 1); // 乙同学速度1-18米/秒
RunThread run3 = new RunThread(random.nextInt(16) + 1); // 丙同学速度1-16米/秒
Thread thread1 = new Thread(run1, "甲");
Thread thread2 = new Thread(run2, "乙");
Thread thread3 = new Thread(run3, "丙");
thread1.start();
thread2.start();
thread3.start();
}
}
```
总结
通过上述示例