再议java多线程Thread和Runable

JAVA herman 1671浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。 在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

java实现多线程的两种方式:继承Thread和实现Runable

这两种方式都能实现一个线程,当我们启动一个test线程的的时候,实际上是启动了main和test两个线程。两个线程并行执行,所以 他们执行的顺序是不确定的,取决于谁先获得CPU资源。同时还有一个必定会启动的线程就是垃圾回收线程,程序运行在JVM上,启动线程就是启动程序,JVM需要对它进行资源分配和管理,而java的内存自动管理机制就会启动垃圾回收线程来管理资源。

Thread和Runable的异同

Runable接口:这个接口只有一个抽象方法Run()。

Thread类:由于类里面的东西比较多,需要看的可以打开看下,可以看到Thread实现了Runable接口,其中还拥有许多自己的属性和方法。

eclipse的outline视图

Thread类的属性和方法Thread类的属性和方法

部分属性和方法解读

MIN_PRIORITY: 一个线程可以拥有的最低优先级1
NORM_PRIORITY:分配给线程的默认优先级5
MAX_PRIORITY:一个线程能够拥有的最高优先级10
静态方法:(native方法都是需要VM底层实现的,我们在java源码中看不到具体的实现)
currentThread():返回对当前执行的线程对象的引用。(native方法)
yield():暂停当前正在执行的线程对象,并执行其他线程(native方法)
这个方法的目的是让当前运行线程回到就绪状态(可运行状态)用来让具有相同优先级其他线程可以运行(获得CPU资源),目的是为了同优先级的线程轮转,但实际是无法保证的,因为即使进入了就绪状态,相同的优先级他仍然可能被选择来执行。
sleep():线程休眠,参数指定休眠(暂停)的毫秒数。但是线程不损失任何资源的所有权。(native方法)
start():启动线程,直接让线程进入就绪状态,同时与主线程分开执行,主线程会继续执行后面的方法,二线程则会等待CPU资源,获取CPU资源之后开始运行RUN方法内的内容,RUN方法中包含了线程的需要执行的所有内容,执行完毕,线程结束。
Join(millis):等待millisseconds后这个线程就不再等待(最大等待时间),当millisseconds=0,就是无限等待,直到这个线程执行完毕。(等待调用的是Object的wait方法)
exit():private,私有的方法,这个方法是在Run方法执行结束后用于结束线程的。通过单步调试一个线程发现执行完run方法之后会进入exit方法。
state:枚举类型,线程的状态( NEW, RUNNABLE,BLOCKED,WAITING, TIMED_WAITING,TERMINATED),通过getState()方法可以获取到当前线程的状态。
无论是实现Runable接口还是继承Thread类,最终启动线程的时候我们发现都是调用的start()方法,说明他们最终的都是要通过Thread这个实现类来进行各种操作。通过Runable实现的线程最终还是调用Thread类中的方法和属性。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 再议java多线程Thread和Runable