本章之中我们编写一个龟兔赛跑,用多线程的思想模拟实现
1.创建一个“Race”类去实现接口Runnable,alt+enter快捷键实现run()方法体
public class Race implements Runnable {//胜利者 private static String winner;@Overridepublic void run() {}}
2.在Race类之中写一个判断胜利者的代码,规定谁走到100步就是胜利者
其中的Thread.currentThread().getName()方法为获取主类之中我们制定的对象name变量的值
public boolean gameOver(int steps){ //判断是否有胜利者 if (winner != null){ //已经存在胜利者 return true; } if (steps == 100){ winner = Thread.currentThread().getName(); System.out.println("winner is" + winner); return true; } return false; }
3.在子线程(run方法的执行体)之中写一个判断比赛是否为已经结束并且打印胜利者和胜利者步数的逻辑,此处Thread.currentThread().getName()方法的解释与上同
public void run() { for (int i = 0; i < 101; i++) { //判断比赛是否结束 boolean flag = gameOver(i); if (flag){ break; } System.out.println(Thread.currentThread().getName() + "-->跑了" +i + "步"); } }
4.在主线程(主类)之中创建两个线程对象和Race对象,用以实现“龟兔赛跑”
public static void main(String[] args) { Race race = new Race(); new Thread(race,"兔子").start(); new Thread(race,"乌龟").start(); }
结果分析:
由于并没有规定兔子“瞌睡”这一意外,所以每次的结果都会出现输家不同步数和不同赢家
以下为完整代码,大家可以拿出进行魔改,搞出更加好玩“多线程”吧
package com.kuang.shen; //模拟龟兔赛跑 public class Race implements Runnable { //胜利者 private static String winner; @Override public void run() { for (int i = 0; i < 101; i++) { //判断比赛是否结束 boolean flag = gameOver(i); if (flag){ break; } System.out.println(Thread.currentThread().getName() + "-->跑了" +i + "步"); } } public static void main(String[] args) { Race race = new Race(); new Thread(race,"兔子").start(); new Thread(race,"乌龟").start(); } public boolean gameOver(int steps){ //判断是否有胜利者 if (winner != null){ //已经存在胜利者 return true; } if (steps == 100){ winner = Thread.currentThread().getName(); System.out.println("winner is" + winner); return true; } return false; } }