java线程----体验理解篇

1 篇文章 0 订阅
1 篇文章 0 订阅

基于慕课网:深入浅出java多线程在这里插入图片描述
隋唐演义模型:
在这里插入图片描述
ArmyRunnable.java代码:

public class ArmyRunnable implements Runnable {

    //volatile保证了线程可以正确的读取其他线程写入的值
    //可参考:可见性 ref JMM, happens-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()方法------当前运行线程释放处理器资源)
                Thread.yield();
            }
        }
        //Thread.currentThread()方法 返回当前运行的线程引用
        System.out.println(Thread.currentThread().getName()+"结束了战斗!");
    }
}

KeyPersonThread.java代码:

public class KeyPersonThread 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()+"结束了战斗!");
    }

}

这里ArmyRunnable实现了Runnable接口,而KeyPersonThread则继承了Thread类;
这是线程的两种创建方式;

关于实现Runnable接口和继承Thread类区别:
参考自:https://blog.csdn.net/u012767369/article/details/54907191
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立


Stage.java代码:
/**
 * 隋唐演义大戏舞台
 */
public class Stage extends Thread{

    public void run(){
        System.out.println("欢迎观看隋唐演义");

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("大幕徐徐拉开");

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

        System.out.println("话说隋朝末年,随军与农民起义军 互相厮杀");

        //new两个 ArmyRunnable对象
        ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
        ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();

        //使用Runnable接口创建线程
        Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty,"隋军");
        Thread armyOfRevolt = new Thread(armyTaskOfRevolt,"农民起义军");

        //启动线程,两个军队
        armyOfSuiDynasty.start();
        armyOfRevolt.start();

        //舞台线程休眠,大家专心观看军队厮杀
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("正当双方激战,半路杀出个程咬金");

        Thread mrCheng = new KeyPersonThread();
        mrCheng.setName("程咬金");

        System.out.println("程咬金的理想就是结束战争,使百姓安居乐业!");

        //停止军队作战
        //停止线程方法
        armyTaskOfSuiDynasty.keepRunning = false;
        armyTaskOfRevolt.keepRunning = false;

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

        //所有线程等待程先生完成历史任务
        try {
            mrCheng.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("战争结束,人民安居乐业,程先生实现了积极的人生理想,人民安居乐业");
        System.out.println("谢谢观看隋唐演义,再见!");

    }

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

}

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值