Java-多线程模拟赛跑
参考链接
https://www.cnblogs.com/jingkai555/p/11309912.html?ivk_sa=1024320u
ThreadRun Class
package cn.test;/**
*@author Jensen
*{@data 2022/11/11}
*/
public class ThreadRun implements Runnable{
/**
* 设定一个1000米
*/
private int meterCount = 1000;
/**
* 重写Runnable方法
*/
@Override
public void run() {
/**
* 循环接力总长度
*/
while (true) {
/**
* 如果接力总长度小于100米就退出循环了
* 否则将一直执行go方法
*/
if(meterCount<=100){
break;
}
go();
return;
}
}
/**
* go属于共享方法
* synchronized
*/
public synchronized void go() {
/**
* 拿到当前线程名字并输出 string
*/
System.out.println(Thread.currentThread().getName() + "拿到接力棒!");
/**
* 第一个人开始循环每次循环+10
*/
for (int i = 0; i <100; i+=10 ) {
try {
Thread.sleep(100);
}catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 输出
*/
System.out.println(Thread.currentThread().getName() + "跑了"+(i+10)+"米");
}
/**
* 每次+10 直至100的时候在总长度上减100
*/
meterCount -= 100;
}
}
ThreadTest Class
package cn.test;
/**
* @author Jensen
* {@data 2022/11/11}
*/
public class ThreadTest {
public static void main(String[] args) {
ThreadRun start = new ThreadRun();
for (int i = 0; i <5; i++ ) {
/**
* 通过for循环出5个接力选手
* 并通过实例的方式每次进行赋值
*/
new Thread(start,(i+1)+"号选手").start();
}
}
}
/**
* 这里还有一个问题就是没有每次按照顺序进行接力
* 比如1号跑完100米然后到2号,这种方法是乱序的,后事件后续在改进了
*/