线程理解随笔
前言:这篇文章主要介绍
1什么是线程,线程与进程
2线程的生命周期
主要做理解性记录,不甚详细
一,线程与进程
进程:是操作系统分配资源的最小单位。
线程:是系统可运行的最小单元。
前边是概念,不够接地气。我的理解是进程是具有单独资源空间,可运行的功能块,而线程是功能块中具体的也是最小的执行者。对于Java来说整个虚拟机都可以看做是一个容器。进程是有单独且相对固定的资源持有者,而线程则是对进程资源分配的执行者,进程的边际只能无限靠近进程所拥有的资源。
创建:继承Thread,实现Runnable,和实现Callable几口,接口的实现主要是因为Java语言单继承的局限。而一般不建议使用callable,因为callable有返回值,需要封装才能接收,较麻烦(一般用Java自带的FutureTask封装)
二,线程的生命周期
(1)创建 new一个
(2)就绪状态,Start,表示随时可以执行,若没有阻塞可直接得到资源执行
(3)运行,Run , 执行方法体,也就是线程的实际操作
(4)阻塞,阻塞主要有wait(),sleep(),yiled(),join()
wait是object中的方法,等待,暂时挂起,不释放资源,需要靠notify(), notifyAll()唤起一个唤起当前,一个唤起全部
Sleep()方法如其名,睡一会,休眠状态,到时间会自动唤起,休眠期间释放锁,其他线程可用。
Yiled() 让掉当前已有资源,重新抢夺,有可能失去资源,也有可能重新分配,看命
Join()串行执行
(5)销毁 线程执行完毕,被GC回收,也有可能异常意外死亡
备注one
Stop()一般不用此方法,已废弃,强制释放那个资源,有可能把锁也搞没了,Java讲究的是协作。所以一般用温和一点的方式使用interRupt()标记线程状态,告知当前线程处于中断状态,至于是否中断由线程本身决定,不强制。一般搭配interrupted()使用,判断其当前状态。Interrupted ()是interRupt()静态使用。
备注two
线程几种方式的调用顺序,start和run要搞清楚差别,老有人分不清两者区别,分清使用场景即可识别使用,是作为类方法使用还是作为线程方法体使用
结束语:一只很菜的菜狗,全手打无CV,难免错误,个人理解,理解有误,欢迎指正。