目录

多线程创建的两种方式:

为什么要重写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单继承的局限性

♠②适合多个相同的程序代码去处理同一资源的情况,把线程、代码和数据有效的分离,

体现出来面向对象的设计思想。

五、线程控制

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就是主线程了, 则当所有的主线程结束后,守护线程也会跟着

结束,但不是立刻结束。

六、线程的生命周期

室友用一盘王者荣耀就学会了多线程相关推荐

  1. 爬虫 | 王者荣耀高清壁纸-多线程

    # CY3761 | 2021-11-04 18:23 import json import os import queue import time import urllibimport reque ...

  2. 利用11行Python代码,盗取了室友的U盘,内容十分刺激!

    作者:Python新世界         來源:简书 https://www.jianshu.com/p/3d7b2d9fe679 序言 那个猥琐的家伙整天把个U盘藏着当宝,都睡觉了就拿出来插到电脑上 ...

  3. 我室友打了一把王者6分钟,我秒搞VirtualBox 、CentOS 的安装过程

    一.介绍背景: VirtualBox : 由德国 InnoTek 软件公司出品 Open Source Software, OSS(开源软件) 的⼀种 Hypervisor ,现在则由 Oracle ...

  4. 我室友打了一把王者我6分钟搞会了eclipse安装与配置

    哈喽,我是飞鸟,欢迎阅读,有问题也可以一起交流,点赞

  5. 室友只用了一把王者的时间就入门了「C语言」

  6. 室友打了一晚上游戏我学会了使用GDB调试

    gdb调试 GDB的重要性 启动gdb 查看程序的源码 gdb启动程序 设置断点 删除断点或者或者禁用断点 单步调式 查看这个变量的值 gdb 调试core文件 使用gdb调试正在运行的程序 gdb ...

  7. 室友上了个厕所我就学会了递推算法解决汉诺塔hanoi

    对于游戏的玩法,我们可以简单分解为三个步骤 1)将前63个盘子从X移动到Y上: 2)将最底下的第64个盘子从X移动到Z上: 3)将Y的63个盘子移动到Z上: 第二步是最容易实现的一步,那么第一步和第三 ...

  8. 腾讯王者荣耀AI论文首次曝光:五AI王者局开黑与人类战队打成平手

    夏乙 问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 王者峡谷可能马上要被AI支配了! 腾讯刚刚发布的一篇论文显示,王者荣耀AI在不声不响间,又掌握了新的技能:组团开黑.而且战绩不俗. 5 ...

  9. 王者荣耀AI论文首次曝光:AI王者 VS 真人王者,谁更胜一筹?

    微信改版,加星标不迷路! 夏乙 问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 王者峡谷可能马上要被AI支配了! 腾讯刚刚发布的一篇论文显示,王者荣耀AI在不声不响间,又掌握了新的技能:组 ...

最新文章

  1. onsubmit阻止表单提交
  2. 使用程序判断一个文件是否是有效的PE文件
  3. Win10一周更新系统开始面向企业分支推送
  4. python和halcon_VisionPro和Halcon的详细对比
  5. 2018暑假集训测试六总结
  6. SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口
  7. 【数据操作】优化SQL server性能 之 索引 (转上)
  8. ECharts使用—折线图动态加载
  9. python打开excel执行vba代码_xlwings:操作Excel,通过宏调用Pyhton(VBA调Python)-Go语言中文社区...
  10. 非度量多维标度_R软件包vegan教程 2.1非度量多维度标度变换
  11. Word的样式库在 选项卡中_Word自动生成目录的四种方法步骤
  12. 微软 苏州STCA 2022暑期实习生 平行面+终面 面经
  13. word打开老是配置进度_电脑打开Word文档弹出配置进度窗口怎么解决
  14. 1.计算机网络 知识结构框架
  15. Android APP 快速开发教程(安卓)
  16. ORACLE 按时间创建分区表
  17. Games on a CD CodeForces - 727E(双hash)
  18. HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形
  19. OmniGraffle-绘制流程图
  20. 学校热水系统服务认证

热门文章

  1. 天灾还是人祸:ORA-01565: error in identifying file '/u01/app/oracle/oradata/eftp/testNS.dbf'
  2. 前端都需要学习什么?
  3. 如何判断数组的四种方法
  4. Hbase伪分布式部署
  5. Python学习--手撸LBP实现过程
  6. fork与execl配合使用
  7. linux6.5kdump,GitHub - figozhang/linux-5.0-kdump: Kdump+crash lab
  8. 驾车时适合听什么音乐, 这几十首适合开车听的歌曲推荐
  9. Our Collectors
  10. mysql-读写分离