在线程中方法回调,就是在回调的地方实现interface接口
下面案例(龟兔赛跑)
mian方法类
public class Test {
public static void main(String[] args) {
// 有两个动物,乌龟和兔子 都能跑
// 兔子跑的快点,但是容易打盹,
// 乌龟跑的慢点,坚持不懈
// 从长度 200米
Rabbit rabbit = new Rabbit();
Tortoise t = new Tortoise();
RabbitCallBack rBack = new RabbitCallBack(t);
// 将rBack给rabbit
rabbit.callBack = rBack;
TortoiseCallBack tBack = new TortoiseCallBack(rabbit);
//将tBack 给乌龟
t.callBack = tBack;
rabbit.start();
t.start();
}
}
创建一个动物类
public abstract class Animal extends Thread {
public int length = 200;
public abstract void running();
@Override
public void run() {
super.run();
while (length > 0) {
running();
}
System.out.println(Thread.currentThread().getName() + "赢得了比赛");
}
// 1.在需要回调数据的地方,声明一个接口
public static interface CallBack {
public void win();
}
// 第二部 创建接口对象
public CallBack callBack;
}
创建兔子类继承与动物并实现动物类跑的方法
public class Rabbit extends Animal {
Rabbit() {
setName("兔子");
}
@Override
public void running() {
// 每次跑多远
int dis = (int) (Math.random() * 100) + 1;
length -= dis;
if (length <= 0) {
length = 0;
System.out.println("兔子胜了!");
if (callBack !=null) {
callBack.win();
}
}
System.out.println("兔子跑了"+dis+ " 米,还剩"+length+ " 米");
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
创建一个乌龟类
public class Tortoise extends Animal {
public Tortoise() {
setName("乌龟");
}
@Override
public void running() {
int dis = (int) (Math.random() * 10) + 1;
length -= dis;
if (length <= 0) {
length = 0;
System.out.println("乌龟赢了");
if (callBack != null) {
callBack.win();
}
}
System.out.println("乌龟跑了"+dis+ " 米,还剩"+length+ " 米");
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class RabbitCallBack implements CallBack {
// 回调,当兔子赢得比赛的时候,要结束掉乌龟的线程
//这里要从写win方法
Tortoise tortoise;
public RabbitCallBack(Tortoise tortoise) {
super();
this.tortoise = tortoise;
}
@SuppressWarnings("deprecation")
@Override
public void win() {
tortoise.stop();//结束掉乌龟的线程,虽已过时还是可以用的(简单的用下不推荐用)
}
}
public class TortoiseCallBack implements CallBack {
// 回调,当乌龟赢得比赛的时候,要结束掉兔子的线程
Rabbit rabbit;
public TortoiseCallBack(Rabbit rabbit) {
super();
this.rabbit = rabbit;
}
@SuppressWarnings("deprecation")
@Override
public void win() {
rabbit.stop();
}
}