多线程模拟龟兔赛跑
以下代码用多线程模拟龟兔赛跑:
package com.cxf.multithread.race;
public class TestForRace {
public static void main(String[] args) {
Race race = new Race();
new Thread(race,"兔子").start();
new Thread(race,"乌龟").start();
}
}
class Race implements Runnable{
String winner = null;
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(Thread.currentThread().getName().equals("兔子")){
i++;
if( i>60 && i<63){
System.out.println("兔子开始睡觉了~");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
}
if(winner==null){//when winner=null,no memory is allocated
winner = Thread.currentThread().getName();
System.out.println("冠军是"+winner+"!!!");
}
else {
System.out.println(Thread.currentThread().getName()+"也完成了比赛,可惜冠军是"+winner);
}
}
}
上述代码中,兔子和乌龟分别为两个线程。
乌龟每步走1米,兔子每步走2米。此处每走一步让进程暂停1ms,表示走一步花费了一些时间。
兔子跑到60米时会开始睡觉,这时乌龟继续往前跑。
这里winner是两个线程都能访问并修改的变量,先跑完100米的线程先给winner赋值,winner有值存在时,另一个线程就不再修改它。
输出结果:
兔子跑了1米
乌龟跑了0米
兔子跑了3米
乌龟跑了1米
兔子跑了5米
乌龟跑了2米
乌龟跑了3米
兔子跑了7米
乌龟跑了4米
兔子跑了9米
乌龟跑了5米
兔子跑了11米
乌龟跑了6米
兔子跑了13米
乌龟跑了7米
兔子跑了15米
乌龟跑了8米
兔子跑了17米
兔子跑了19米
乌龟跑了9米
兔子跑了21米
乌龟跑了10米
乌龟跑了11米
兔子跑了23米
兔子跑了25米
乌龟跑了12米
兔子跑了27米
乌龟跑了13米
乌龟跑了14米
兔子跑了29米
兔子跑了31米
乌龟跑了15米
兔子跑了33米
乌龟跑了16米
乌龟跑了17米
兔子跑了35米
乌龟跑了18米
兔子跑了37米
乌龟跑了19米
兔子跑了39米
乌龟跑了20米
兔子跑了41米
乌龟跑了21米
兔子跑了43米
乌龟跑了22米
兔子跑了45米
乌龟跑了23米
兔子跑了47米
乌龟跑了24米
兔子跑了49米
乌龟跑了25米
兔子跑了51米
乌龟跑了26米
兔子跑了53米
兔子跑了55米
乌龟跑了27米
乌龟跑了28米
兔子跑了57米
兔子跑了59米
乌龟跑了29米
乌龟跑了30米
兔子开始睡觉了~
乌龟跑了31米
乌龟跑了32米
乌龟跑了33米
乌龟跑了34米
乌龟跑了35米
乌龟跑了36米
乌龟跑了37米
乌龟跑了38米
乌龟跑了39米
乌龟跑了40米
乌龟跑了41米
乌龟跑了42米
乌龟跑了43米
乌龟跑了44米
乌龟跑了45米
乌龟跑了46米
乌龟跑了47米
乌龟跑了48米
乌龟跑了49米
乌龟跑了50米
乌龟跑了51米
乌龟跑了52米
乌龟跑了53米
乌龟跑了54米
乌龟跑了55米
乌龟跑了56米
乌龟跑了57米
乌龟跑了58米
乌龟跑了59米
乌龟跑了60米
乌龟跑了61米
乌龟跑了62米
乌龟跑了63米
乌龟跑了64米
乌龟跑了65米
乌龟跑了66米
乌龟跑了67米
乌龟跑了68米
乌龟跑了69米
乌龟跑了70米
乌龟跑了71米
乌龟跑了72米
乌龟跑了73米
乌龟跑了74米
乌龟跑了75米
乌龟跑了76米
乌龟跑了77米
乌龟跑了78米
乌龟跑了79米
乌龟跑了80米
乌龟跑了81米
乌龟跑了82米
乌龟跑了83米
乌龟跑了84米
乌龟跑了85米
乌龟跑了86米
乌龟跑了87米
兔子跑了61米
乌龟跑了88米
乌龟跑了89米
兔子跑了63米
乌龟跑了90米
兔子跑了65米
乌龟跑了91米
兔子跑了67米
兔子跑了69米
乌龟跑了92米
兔子跑了71米
乌龟跑了93米
兔子跑了73米
乌龟跑了94米
兔子跑了75米
乌龟跑了95米
兔子跑了77米
乌龟跑了96米
兔子跑了79米
乌龟跑了97米
兔子跑了81米
乌龟跑了98米
兔子跑了83米
乌龟跑了99米
乌龟跑了100米
兔子跑了85米
冠军是乌龟!!!
兔子跑了87米
兔子跑了89米
兔子跑了91米
兔子跑了93米
兔子跑了95米
兔子跑了97米
兔子跑了99米
兔子跑了101米
兔子也完成了比赛,可惜冠军是乌龟