多线程使用:模拟一次宇宙战争来,看看多线程的其中一种使用场景。

第一步(使用Runnable)

第一步,通过Runnable构建一个军队的线程,军队发动多次进攻,线程线程执行完便是军队战争结束
把控战争进度通过控制while循环实现

/*** @author liuzonghua* @Package top.maniy.util* @Description:* @date 2018/11/7 16:22*/
public class ArmyRunnable implements Runnable{//volatile保证了线程可以正确的读取其他线程写入的值//可见性 JMM happens-before原型volatile boolean keepRunning=true;@Overridepublic void run() {while (keepRunning){for(int i=0;i<5;i++) {System.out.println(Thread.currentThread().getName() + "进攻对方【" + i + "】");//让出了处理时间,下次该谁进攻还不一定呢!Thread.yield();}}System.out.println(Thread.currentThread().getName()+"结束了战斗!");}
}

第二步(Thread)

Runnable使用了,我们在使用一次Thread,来表示一个关键人物介绍这场战争

public class KeyPersonThread extends Thread{@Overridepublic 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()+"结束战斗");}
}

第三步(战争舞台)

我们要把这些军队和关键人物搬上舞台来跑起来。
也就是线程的使用,这里可以把舞台也通过线程实现,便是线程调用线程的场景。
改变keepRunning 值来停止战争

public class Stage extends Thread {@Overridepublic void run(){System.out.println("欢迎观看多线程模拟宇宙战争");//等待几秒吧try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("开始了");ArmyRunnable armyRunnableOne =new ArmyRunnable();ArmyRunnable armyRunnableTwo =new ArmyRunnable();//使用Runnable接口创建线程Thread armyOne = new Thread(armyRunnableOne,"弗利沙军队");Thread armyTwo = new Thread(armyRunnableTwo,"白胡子第一军队");//启动线程,让军队开始作战armyOne.start();armyTwo.start();//舞台线程休眠,大家专心观看军队厮杀try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("双方停止战斗吧");armyRunnableOne.keepRunning =false;armyRunnableTwo.keepRunning=false;try {armyOne.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("激战之中,出现boss");Thread boss =new KeyPersonThread();boss.setName("奥利哈刚的巨神兵");System.out.println("我要结束一切");armyRunnableOne.keepRunning =false;armyRunnableTwo.keepRunning=false;try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}boss.start();try {boss.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("一切将会结束");System.out.println("宇宙战争结束");}public static void main(String[] args){new Stage().start();}}

知识点

一、volatile关键字
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

2)禁止进行指令重排序。
二、Thread.yield();
当调用Thread.yield()方法时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示.
说白话,就是线程暂停允许执行其他线程(包括自己),我把球丢在空中,大家一起抢。
三、t.join();
t.join()方法会使所有线程都暂停并等待t的执行完毕。这里等待军队线程结束后,在执行关键人物线程。

多线程之使用:模拟一次宇宙战争来,看看多线程的其中一种使用场景。相关推荐

  1. 利用基于GPU的AI模拟一个现实宇宙 仅需36分钟

    来源:The Next Web 编译:科技行者 科学家已经习惯于使用超级计算机处理宇宙学领域的海量数据,最近卡耐基梅隆大学的研究团队找到一种新方法,可以使用常规的机器学习技术(与AI绘画或作曲拥有同样 ...

  2. python 银行业务系统程序编程写_python多线程实现代码(模拟银行服务操作流程)

    1.模拟银行服务完成程序代码 目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队.排队等待.叫号服务等功能,代替了人们站队的辛苦. 排队叫号 ...

  3. python银行系统模拟演练_python多线程实现代码(模拟银行服务操作流程)

    1.模拟银行服务完成程序代码 目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队.排队等待.叫号服务等功能,代替了人们站队的辛苦. 排队叫号 ...

  4. python银行业务办理时间_python多线程实现代码(模拟银行服务操作流程)

    1.模拟银行服务完成程序代码 目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队.排队等待.叫号服务等功能,代替了人们站队的辛苦. 排队叫号 ...

  5. python排队叫号_python多线程实现代码(模拟银行服务操作流程)

    1.模拟银行服务完成程序代码 目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队.排队等待.叫号服务等功能,代替了人们站队的辛苦. 排队叫号 ...

  6. 多线程试验。模拟航班售票系统,实现4个售票窗口发售某班次航班的100张机票,一个售票窗口用一个线程表示。要求不能重复发售。

    五一假期要到了,希望大家都都能开开心心 代码 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; i ...

  7. Java多线程案例:模拟12306火车站售票系统

    Java多线程案例:模拟12306火车站售票系统 该系统一共涉及到3个类: 车票(Ticket) 12306系统(System12306) 售票窗口(Window) 车票类,涉及三个属性: 起始站 终 ...

  8. java swing游戏源码-宇宙战争游戏,Java飞船射击游戏

    原文:java swing游戏源码-宇宙战争游戏,Java飞船射击游戏 源代码下载地址: http://www.zuidaima.com/share/1880717151603712.htm 一个基于 ...

  9. 多线程编程:模拟商店对某件商品的进货与销售过程并将相关信息打印出来

    Java 多线程 利用线程通知机制编写一个Java多线程程序,模拟商店对某件商品的进货与销售过程并将相关信息打印出来,具体要求如下: 进货与销售过程各由一个线程模拟:当商品数目少于10时进货,进货数目 ...

最新文章

  1. [语义]情感分析方向近况·0908
  2. 宁波计算机软考培训机构,浙江宁波2019年下半年软考通过率约为25.7%
  3. 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )
  4. *args, **kwargs
  5. linux+qq+输入法下载,QQ拼音输入法下载
  6. 博弈论总结 四大博弈模型 SG函数
  7. vc编程经典网址推荐
  8. ubuntu全版本安装 NVIDIA显卡驱动、以及重装、卸载
  9. win10 红警启动必要文件
  10. JavaScript求和函数
  11. Linux中的bin文件夹
  12. PHP - 使用file_get_contents下载远程文件到本地
  13. 查询出生日期到现在的天数
  14. VS2010版本介绍(转自:http://www.cnblogs.com/Leo_wl/archive/2010/06/02/1750035.html)
  15. 儿童编程Scratch入门课程都学习什么内容?
  16. 安卓11?快!扶我起来继续学
  17. 【英文版+中文版】2021年美国大学生数学建模赛题发布!!!
  18. 计算机传感器毕业设计,基于压电传感器的心率计的计算机设计与仿真毕业设计论文.doc...
  19. html微信支付功能代码,微信小程序 支付功能(前端)的实现
  20. ZOJ Problem Set - 1331 Perfect Cubes

热门文章

  1. 简单快递查询接口API/插件开发使用
  2. kernel: TCP: out of memory -- consider tuning tcp_mem 问题处理记录
  3. SQLServer数据库、附加数据库时出错。有关详细信息,请单击“消息”列中的超链接
  4. java报表开发之报表总述
  5. 接口测试-Jmeter下载+安装+汉化
  6. 【神经网络】小样本学习
  7. HDU6741秦皇岛CCPC2019MUV LUV UNLIMITED(博弈)
  8. 制作一个京东平台的优惠卷
  9. 备战双十一购物狂欢节大促的四个重要阶段
  10. APW7080KAI-TRG