1.使用Runnable和Thread完成线程创建和基本操作

利用《倚天屠龙记》中光明顶之战来完成线程的创建及线程的基本操作

  • GuangMingDing.java:舞台线程
  • HeroThread.java:六大门派线程
  • SchoolRunnable.java:英雄线程(就是张无忌啦)

Runnable和Thread

@FunctionalInterface
public interface RunnableRunnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run 。
该接口旨在为希望在活动时执行代码的对象提供一个通用协议。 例如, Runnable由Thread类Thread 。 活跃的只是意味着一个线程已经启动,还没有被停止。

另外, Runnable提供了一个类被激活而不是Thread Thread类化的Thread 。 一个实现类Runnable可以在不继承运行Thread实例化一个Thread实例,并在传递本身作为目标。 在大多数情况下, Runnable接口应使用,如果你只打算重写run()方法并没有其他Thread方法。 这是重要的,因为类不应该被子类化,除非程序员打算修改或增强类的基本行为。

//门派线程
//模拟作战双方的行为
public class SchoolRunnable implements Runnable {

    //volatile保证了线程可以正确的读取其他线程写入的值
    //可见性 ref JMMhappens-before原则
    volatile boolean keepRunning = true;
    @Override
    public void run() {
        while(keepRunning){
            //发动5连击
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName()+"进攻对方["+i+"]");
                //让出了处理器时间,下次该谁进攻还不一定呢!
                Thread.yield();
            }
        }
        System.out.println(Thread.currentThread().getName()+"结束了战斗!");
    }

//英雄线程
public class HeroThread extends Thread {

    public void run(){
        System.out.println(Thread.currentThread().getName()+"开始了战斗!");
        for(int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"打败六大门派。。。");
        }
        System.out.println(Thread.currentThread().getName()+"结束了战斗!");
    }
}

//舞台(光明顶)线程
/**
 * 光明顶激战大戏
 */
public class GuangMingDing extends Thread {

    public void run(){

        System.out.println("光明顶之战马上开始");
        //让观众们安静片刻,等待大戏上演
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        System.out.println("大幕徐徐拉开");

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }

        System.out.println("六大门派围攻光明顶...");

        SchoolRunnable MingSchool = new SchoolRunnable();
        SchoolRunnable SixSchool= new SchoolRunnable();

        //使用Runnable接口创建线程
        Thread  MingSchoolThread = new Thread(MingSchool,"明教");
        Thread  SixSchoolThread= new Thread(SixSchool,"六大门派");

        //启动线程,让武林人士开始作战
        MingSchoolThread.start();
        SixSchoolThread.start();

        //舞台线程休眠,大家专心观看军队厮杀
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("正当双方激战正酣,张无忌闪亮登场。。。");

        Thread  mrZhang = new HeroThread();
        mrZhang.setName("张无忌");

        System.out.println("张无忌的理想就是天下太平,跟赵敏比翼双飞!");

        //停止作战
        //停止线程的方法
        MingSchool.keepRunning = false;
        SixSchool.keepRunning = false;

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        /*
         * 历史大戏留给关键人物
         */
        mrZhang.start();

        //万众瞩目,所有线程等待程先生完成历史使命
        try {
            mrZhang.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        System.out.println("光明顶之战结束,张无忌成了教主!");
        System.out.println("谢谢观看血战光明顶,再见!");

    }

    public static void main(String[] args) {
        new GuangMingDing().start();

    }
}

输出样例

光明顶之战马上开始
大幕徐徐拉开
六大门派围攻光明顶…
明教进攻对方[0]
明教进攻对方[1]
六大门派进攻对方[0]
六大门派进攻对方[1]
六大门派进攻对方[2]
明教进攻对方[2]
明教进攻对方[3]
明教进攻对方[4]
明教进攻对方[0]
六大门派进攻对方[3]
六大门派进攻对方[4]
明教进攻对方[1]
明教进攻对方[2]
……
……
明教进攻对方[1]
明教进攻对方[2]
明教进攻对方[3]
正当双方激战正酣,张无忌闪亮登场。。。
明教进攻对方[4]
明教进攻对方[0]
明教进攻对方[1]
明教进攻对方[2]
明教进攻对方[3]
明教进攻对方[4]
六大门派进攻对方[1]
明教进攻对方[0]
明教进攻对方[1]
张无忌的理想就是天下太平,跟赵敏比翼双飞!
六大门派进攻对方[2]
六大门派进攻对方[3]
明教进攻对方[2]
六大门派进攻对方[4]
六大门派结束了战斗!
明教进攻对方[3]
明教进攻对方[4]
明教结束了战斗!
张无忌开始了战斗!
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌打败六大门派。。。
张无忌结束了战斗!
光明顶之战结束,张无忌成了教主!
谢谢观看血战光明顶,再见!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值