Java多线程第二集(多线程实现方式)
线程是cpu调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。
一、线程的生命周期
JDk中用Thread。State类定义了线程的几种状态
想要实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在他的一个完整的生命周期中通常要经历如下的五种状态:
1。新建:当一个Thread类或其子类的对象被声明并创建时,新的线程对象处于新建状态。
2。就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源。
3。运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能。
4。阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态。
5。死亡:线程完成了它的全部工作或线程被提前强制性的中止或出现异常倒置导致结束。
二、多线程实现的原理
lJava语言的JVM允许程序运行多个线程,多线程可以通过Java中的java。lang。Thread类来体现。
lThread类的特性
1。每个线程都是通过某个特定的Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体。
2。通过Thread方法的start()方法来启动这个线程,而非直接调用run()。
三、多线程创建方式
(1)继承Thread类
1。创建一个继承于Thread类的子类。
2。重写Thread类的run()方法。
3。创建Thread类的子类的对象。
4。通过此对象调用start()来启动一个线程。
(2)创建Thread匿名类
(3)实现Runnable接口
1。创建一个实现Runnable接口的类。
2。实现类去实现Runnable接口中的抽象方法:run()。
3。创建实现类的对象。
4。将此对象作为参数传到Thread类的构造器中,创建Thread类的对象。
5。通过Thread类的对象调用start()方法。
Java中只允许单进程,只能继承一个Thread类来完成多线程,但是一个类可以实现多个接口,因此实现的方式没有类的单继承性的局限性,用实现Runnable接口的方式来完成多线程更加实用。
实现Runnable接口的方式天然具有共享数据的特性(不用static变量)。因为继承Thread的实现方式,需要创建多个子类的对象来进行多线程,如果子类中有变量A,而不使用static约束变量的话,每个子类的对象都会有自己独立的变量A,只有static约束A后,子类的对象才共享变量A。而实现Runnable接口的方式,只需要创建一个实现类的对象,要将这个对象传入Thread类并创建多个Thread类的对象来完成多线程,而这多个Thread类对象实际上就是调用一个实现类对象而已。实现的方式更适合来处理多个线程有共享数据的情况。
联系:Thread类中也实现了Runnable接口
相同点两种方式都需要重写run()方法,线程的执行逻辑都在run()方法中
(4)实现Callable接口
与Runnable相比,Callable功能更强大
1。相比run()方法,可以有返回值
2。方法可以抛出异常
3。支持泛型的返回值
4。需要借助FutureTask类,比如获取返回结果
(5)线程池
背景:
经常创建和销毁、使用量特别大的资源、比如并发情况下的线程、对性能影响很大。
思路:
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。
优点:
提高响应速度(减少了创建新线程的时间)
降低资源消耗(重复利用线程池中线程,不需要每次都创建)
便于线程管理
四、Java调度算法
l同优先级线程组成先进先出队列(先到先服务),使用时间片策略。
l堆高优先级,使用优先调度的抢占式策略。
线程的优先级等级(一共有10挡)
lMAXPRIORITY:10
lMINPRIORITY:1
lNORMPRIORITY:5(默认优先级)
获取和设置当前线程的优先级
lgetPriority();获取
lsetPriority(intp);设置
说明:高优先级的线程要抢占低优先级线程cpu的执行权。但是只是从概率上讲,高优先级的线程高概率的情况下被执行。并不意味着只有高优先级的线程执行完成以后,低优先级的线程才执行。
五、Thread类的常用方法
lstart():启动当前线程,调用当前线程的run()方法
lrun():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
lcurrentThread():静态方法,返回当前代码执行的线程
lgetName():获取当前线程的名字
lsetName():设置当前线程的名字
lyield():释放当前CPU的执行权
ljoin():在线程a中调用线程b的join(),此时线程a进入阻塞状态,知道线程b完全执行完以后,线程a才结束阻塞状态
lstop():已过时。当执行此方法时,强制结束当前线程。
lsleep(longmilitime):让线程睡眠指定的毫秒数,在指定时间内,线程是阻塞状态
lisAlive():判断当前线程是否存活
六、线程的安全性上一章已经讲解。
孕期脱发不知道怎么选择洗发水?有没有人和我一样怀个孕体重长了不少,头发也掉了不少。怀孕因为孕激素的影响,头皮比以往新陈代谢更强,出油情况也更严重!超市上的洗发水用哪个牌子都踩雷,头皮屑出油掉发统统找上门。想要改
大家自查一下,娃的这个阅读障碍症,上小学以后超明显我要上头条育儿我最近看到妈妈圈都在传一个症状学习困难症。专家指出,学习困难的发生率在20左右,相当于每5个学生就有1个。家里有个学习令人头疼的男孩,我立马去了解了一通。据复旦附属儿
直接告诉你,十大性价比极低的奶粉品牌奶粉安全问题一直是每个宝妈都非常关注的事情,市面上的新生儿奶粉种类较多,哪些品牌我们不推荐呢,今天小编就给大家做个汇总,一起来看看奶粉品牌性价比低的有哪些!首先说明排名不分先后,如
多位高管撂挑子,市值踝斩的诺泰生物出啥事了?作者深水财经社冰火11月16日晚间,地处中国药港的诺泰生物(688076)发布公告称,徐东海因个人原因申请辞去公司财务总监职务。深水财经社观察到,诺泰生物两任财务总监先后撂挑子,今
金铁霖告别仪式,亲友学生手捧白花伤感送别,灵堂外排起长龙11月15日,著名歌唱家声乐教育家金铁霖因病辞世,享年83岁。金铁霖离世,半个乐坛为之震动,李谷一祖海戴玉强冯远征大衣哥等人发文悼念,众人都曾向金铁霖学习,是金铁霖的学生。11月1
高质量热搜文案每一次日落都是太阳留给天空最后的温柔1。以最大的平静,去爱我们不确定的生活。2。站在属于自己的高度,去看自己该看的风景。3。与理想平等交易,同喧嚣保持距离。4。前方的风景好,我的意思是别回头。5。在这个智商过剩的年代
以岭药业真的堪比九安医疗吗?目前,市场中最热的明星股莫过于以岭药业,几则断货和招聘临时工的普通消息,把被疫情折磨的精疲力尽无可奈何的人们的情绪激发到了沸腾。但是炒股炒着炒着竟然变成了吵架,很多人说连花清瘟胶囊
牙茅通策医疗董事长被证监会立案调查,曾是热搜常客11月18日,通策医疗(600763。SH)发布公告,实际控制人兼董事长吕建明今日收到中国证券监督管理委员会立案告知书,因吕建明涉嫌信息披露违法违规,中国证券监督管理委员会决定对吕
被肾病朋友问得最多的饮食问题大解答,快看看有没有你关心的肾脏作为我们的排泄器官,我们每天吃什么喝什么都至关重要,也与它的健康状态息息相关。那么,你真的懂你肾脏的喜好吗?今天给大家出一期饮食解答大全,都是被问得最多的问题。怎么吃肉?肾友们
腾讯Q3财报长视频下降,短视频真香?来源流媒体网11月16日,腾讯公布了2022年第三季度财报。财报显示,腾讯视频付费会员数小幅降至1。2亿。对比此前数据,则环比减少了200万,同比减少了900万。对于此次付费会员数
这7种食物被吹上天,却没太大的用,别再花冤枉钱了肠胃消化不好,养胃必不可少眼下市面上推出了各种主打养胃概念的饼干比如猴头菇饼干据说这些养胃饼干能够改善肠胃功能起到养胃的作用事实真的是这样吗?划重点01hr养胃饼干实际就是普通饼干