室友用一盘王者荣耀就学会了多线程
目录
多线程创建的两种方式:
为什么要重写run方法?
run()方法和start方法的区别?
通过继承的方法和实现接口的方式创建多线程,哪个好?
一、前言
线程可能听起来有点难,其实也是非常好理解的,咱们以游戏姿势进入。
二、线程和进程
进程:是正在运行的,进程是资源分配的最小单位。
线程:是cpu调度的最小单位(线程依赖于进程)。
上面可能有些难懂, 打个比喻 ,好比你打一把 王者 (其实我不玩哈doge) , 进程 比作是你
开的那一把游戏, 线程 比作成每个玩家所选的英雄或者是游戏中的水晶野怪等之类的。带着
这个比喻来理解进程和线程的一些关系。
一个进程有多个线程就叫多线程。是不是感觉非常好理解。
❤1.线程在进程下进行
1. (比如你单独的英雄角色、野怪、小兵肯定不能运行)
❤2.进程之间不会相互影响,一个线程结束将会导致整个进程结束
2.(两把游戏之间不会有联系和影响。你的水晶被推掉,你这把游戏就结束了)
❤3.不同的进程数据很难共享
3.(两把游戏之间很难有联系,有联系的情况比如上把的敌人这把又匹配到了)
❤4.同进程下的不同线程之间数据很容易共享
4.(你开的那一把游戏,你可以看到每个玩家的状态(生死),也可以看到每个玩家的出装备等等)
5.进程的使用内存地址可以限定使用量
5.(开的房间模式,你可以设置有多少人进,当房间满了后,其他人就进不去了,除非有人退出房间,其他人才能进)
三、多线程的创建
多线程创建的两种方式:
♠①:创建一个类继承Thread类,并重写run方法。
♠②:创建一个类实现Runnable接口,并重写run方法。
方式①:
MyThread类下:
public class MyThread extends Thread {@Overridepublic void run() {for(int i=0;i<100;i++){System.out.println(getName()+":打了"+i+"个小兵");}} }
MyThreadText类下:
public class MyThreadText {public static void main(String[] args) {//创建MyThread对象MyThread t1=new MyThread();MyThread t2=new MyThread();MyThread t3=new MyThread();//设置线程的名字t1.setName("鲁班");t2.setName("刘备");t3.setName("亚瑟");//启动线程t1.start();t2.start();t3.start();} }
效果图:
方式②:
MyRunnable类下:
public class MyRunnable implements Runnable {@Overridepublic void run() {for(int i=0;i<10;i++){try {//sleep会发生异常要显示处理Thread.sleep(20);//暂停20毫秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"打了:"+i+"个小兵");}} }
MyRunnableText类下:
public class MyRunnableText {public static void main(String[] args) {//创建MyRunnable类MyRunnable mr=new MyRunnable();//创建Thread类的有参构造,并设置线程名Thread t1=new Thread(mr,"张飞");Thread t2=new Thread(mr,"貂蝉");Thread t3=new Thread(mr,"吕布");//启动线程t1.start();t2.start();t3.start();}}
有sleep暂停的效果图:
四、几个常见的问题?
为什么要重写run方法?
- 因为run方法是用来封装被线程执行的代码。
run()方法和start方法的区别?
- run():封装线程执行的代码,直接调用相当于调用普通方法。就是一直到这个方法结束才出来。
- start():启动线程,然后由JVM此线程的run()方法,可同时进行多个对象调用start()方法。
通过继承的方法和实现接口的方式创建多线程,哪个好?
实现Runable接口好,原因:
♠①避免了Java单继承的局限性
♠②适合多个相同的程序代码去处理同一资源的情况,把线程、代码和数据有效的分离,
体现出来面向对象的设计思想。
五、线程控制![](/assets/blank.gif)
sleep:
sleep的使用要进行显示处理异常:
try {//sleep会发生异常要显示处理Thread.sleep(20);//暂停20毫秒} catch (InterruptedException e) {e.printStackTrace();}
join:
♠ join是指等待这个线程执行完才会轮到后续线程得到cpu的执行权,使用这个也要抛出异常
具体使用:
public class MyThreadText {public static void main(String[] args) throws InterruptedException {//throws抛出join出现的异常//创建MyThread对象MyThread t1=new MyThread();MyThread t2=new MyThread();MyThread t3=new MyThread();//设置线程的名字t1.setName("鲁班");t2.setName("刘备");t3.setName("亚瑟");//启动线程t1.start();t1.join();//等待t1执行完才会轮到t2,t3抢t2.start();t3.start(); } }
setDaemon():
t1.setName("张飞");t2.setName("关羽");t3.setName("刘备");t1.setDaemon(true);t2.setDaemon(true);
为true时说明是守护线程。
♠将t1,t2设置守护线程t3就是主线程了, 则当所有的主线程结束后,守护线程也会跟着
结束,但不是立刻结束。
六、线程的生命周期![](/assets/blank.gif)
室友用一盘王者荣耀就学会了多线程相关推荐
- 爬虫 | 王者荣耀高清壁纸-多线程
# CY3761 | 2021-11-04 18:23 import json import os import queue import time import urllibimport reque ...
- 利用11行Python代码,盗取了室友的U盘,内容十分刺激!
作者:Python新世界 來源:简书 https://www.jianshu.com/p/3d7b2d9fe679 序言 那个猥琐的家伙整天把个U盘藏着当宝,都睡觉了就拿出来插到电脑上 ...
- 我室友打了一把王者6分钟,我秒搞VirtualBox 、CentOS 的安装过程
一.介绍背景: VirtualBox : 由德国 InnoTek 软件公司出品 Open Source Software, OSS(开源软件) 的⼀种 Hypervisor ,现在则由 Oracle ...
- 我室友打了一把王者我6分钟搞会了eclipse安装与配置
哈喽,我是飞鸟,欢迎阅读,有问题也可以一起交流,点赞
- 室友只用了一把王者的时间就入门了「C语言」
- 室友打了一晚上游戏我学会了使用GDB调试
gdb调试 GDB的重要性 启动gdb 查看程序的源码 gdb启动程序 设置断点 删除断点或者或者禁用断点 单步调式 查看这个变量的值 gdb 调试core文件 使用gdb调试正在运行的程序 gdb ...
- 室友上了个厕所我就学会了递推算法解决汉诺塔hanoi
对于游戏的玩法,我们可以简单分解为三个步骤 1)将前63个盘子从X移动到Y上: 2)将最底下的第64个盘子从X移动到Z上: 3)将Y的63个盘子移动到Z上: 第二步是最容易实现的一步,那么第一步和第三 ...
- 腾讯王者荣耀AI论文首次曝光:五AI王者局开黑与人类战队打成平手
夏乙 问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 王者峡谷可能马上要被AI支配了! 腾讯刚刚发布的一篇论文显示,王者荣耀AI在不声不响间,又掌握了新的技能:组团开黑.而且战绩不俗. 5 ...
- 王者荣耀AI论文首次曝光:AI王者 VS 真人王者,谁更胜一筹?
微信改版,加星标不迷路! 夏乙 问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 王者峡谷可能马上要被AI支配了! 腾讯刚刚发布的一篇论文显示,王者荣耀AI在不声不响间,又掌握了新的技能:组 ...
最新文章
- onsubmit阻止表单提交
- 使用程序判断一个文件是否是有效的PE文件
- Win10一周更新系统开始面向企业分支推送
- python和halcon_VisionPro和Halcon的详细对比
- 2018暑假集训测试六总结
- SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口
- 【数据操作】优化SQL server性能 之 索引 (转上)
- ECharts使用—折线图动态加载
- python打开excel执行vba代码_xlwings:操作Excel,通过宏调用Pyhton(VBA调Python)-Go语言中文社区...
- 非度量多维标度_R软件包vegan教程 2.1非度量多维度标度变换
- Word的样式库在 选项卡中_Word自动生成目录的四种方法步骤
- 微软 苏州STCA 2022暑期实习生 平行面+终面 面经
- word打开老是配置进度_电脑打开Word文档弹出配置进度窗口怎么解决
- 1.计算机网络 知识结构框架
- Android APP 快速开发教程(安卓)
- ORACLE 按时间创建分区表
- Games on a CD CodeForces - 727E(双hash)
- HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形
- OmniGraffle-绘制流程图
- 学校热水系统服务认证
热门文章
- 天灾还是人祸:ORA-01565: error in identifying file '/u01/app/oracle/oradata/eftp/testNS.dbf'
- 前端都需要学习什么?
- 如何判断数组的四种方法
- Hbase伪分布式部署
- Python学习--手撸LBP实现过程
- fork与execl配合使用
- linux6.5kdump,GitHub - figozhang/linux-5.0-kdump: Kdump+crash lab
- 驾车时适合听什么音乐, 这几十首适合开车听的歌曲推荐
- Our Collectors
- mysql-读写分离