java+跑多线程,java多线程有哪些开发案例?java多线程开发实例

Java人员在开发中经常使用线程来优化程序,提高系统执行效率,从而帮助java人员更好的开发,那么java多线程有哪些开发案例?今天我们就来给大家讲解一下java多线程开发实例之龟兔赛跑问题。

龟兔赛跑问题

龟兔赛跑:2000米

要求:

(1)兔子每 0.1 秒 5 米的速度,每跑20米休息1秒;

(2)乌龟每 0.1 秒跑 2 米,不休息;

(3)其中一个跑到终点后另一个不跑了!

程序设计思路:

(1)创建一个Animal动物类,继承Thread,编写一个running抽象方法,重写run方法,把running方法在run方法里面调用。

(2)创建Rabbit兔子类和Tortoise乌龟类,继承动物类

(3)两个子类重写running方法

(4)本题的第3个要求涉及到线程回调。需要在动物类创建一个回调接口,创建一个回调对象。

(一)创建Animal动物类package com.thread.demo.demo3;

public abstract class Animal extends Thread

{

public int length = 2000; // 比赛长度

public abstract void runing();

@Override

public void run()

{

super.run();

while (length > 0)

{

runing();

}

}

// 在需要回调数据的地方(两个子类需要),声明一个接口

public static interface Calltoback

{

public void win();

}

// 2.创建接口对象

public Calltoback calltoback;

}

(二)创建Rabbit兔子类package com.thread.demo.demo3;

public class Rabbit extends Animal

{

public Rabbit()

{

setName("兔子");

}

@Override

public void runing()

{

//兔子速度

int dis = 5;

length -= dis;

System.out.println("兔子跑了" + dis + "米,距离终点还有" + length + "米");

if (length <= 0)

{

length = 0;

System.out.println("兔子获得了胜利");

// 给回调对象赋值,让乌龟不要再跑了

if (calltoback != null)

{

calltoback.win();

}

}

try

{

if ((2000 - length) % 20 == 0)

{ // 每20米休息一次,休息时间是1秒

sleep(1000);

}

else

{ //没0.1秒跑5米

sleep(100);

}

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

}

(三)创建Tortoise乌龟类package com.thread.demo.demo3;

public class Tortoise extends Animal

{

public Tortoise()

{

setName("乌龟"); // Thread的方法,给线程赋值名字

}

// 重写running方法,编写乌龟的奔跑操作

@Override

public void runing()

{

// 乌龟速度

int dis = 2;

length -= dis;

System.out.println("乌龟跑了" + dis + "米,距离终点还有" + length + "米");

if (length <= 0)

{

length = 0;

System.out.println("乌龟获得了胜利");

// 让兔子不要在跑了

if (calltoback != null)

{

calltoback.win();

}

}

try

{

sleep(100); //没0.1秒跑2米

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

}

(四)创建一个让动物线程停止的类,这里要实现回调接口package com.thread.demo.demo3;

import com.thread.demo.demo3.Animal.Calltoback;

public class LetOneStop implements Calltoback

{

// 动物对象

Animal an;

// 获取动物对象,可以传入兔子或乌龟的实例

public LetOneStop(Animal an)

{

this.an = an;

}

// 让动物的线程停止

@Override

public void win()

{

// 线程停止

an.stop();

}

}

(五)创建一个主方法调用类package com.thread.demo.demo3;

public class MainClass

{

/**

* 龟兔赛跑:2000米

*/

public static void main(String[] args)

{

// 实例化乌龟和兔子

Tortoise tortoise = new Tortoise();

Rabbit rabbit = new Rabbit();

// 回调方法的使用,谁先调用calltoback方法,另一个就不跑了

LetOneStop letOneStop1 = new LetOneStop(tortoise);

// 让兔子的回调方法里面存在乌龟对象的值,可以把乌龟stop

rabbit.calltoback = letOneStop1;

LetOneStop letOneStop2 = new LetOneStop(rabbit);

// 让乌龟的回调方法里面存在兔子对象的值,可以把兔子stop

tortoise.calltoback = letOneStop2;

// 开始跑

tortoise.start();

rabbit.start();

}

}

运行结果:

dc07ff71bd7e013fcabae1be337652c6.png

使用多线程能够帮助更好的优化程序,虽说操作起来比较繁琐,但是我们也可以看出它的逻辑非常清楚,能够更好地开发程序!后大家如果想要了解更多java实例知识,敬请关注奇Q工具网。

推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值