java线程生命周期

一、基础概念:

进程:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程。当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程。

线程:线程可以完成一定任务,可以和其它线程共享父进程的共享变量和部分环境,相互协作来完成任务。每一个线程有自己的寄存器和栈。

cpu核心树和线程的关系:1:1 或1:2(超线程)

cpu时间片轮转机制:

并发编程的利弊:

    好处:充分利用cpu的资源,加快用户响应时间,程序模块化和异步化;

    弊端:线程安全问题、死锁、线程快速切换很容易将cpu拖垮;

二、线程状态

1)NEW : 创建一个新的线程(Thread类、Runnable、Callable),注释:获取线程名称Thread.currentThread().getName();

2)RUNNABLE:就绪,线程创建后,线程.start();线程变为RUNABLE就绪状态,等待资源调度处理(需要被分配一个cpu时间片),如果时间片被使用完了,则也会返回RUNNABLE状态。如果使用yield()方法,则放弃当前已经得到的cpu使用权,但是当下次获得cpu使用权时,还是会RUNNING状态

3)RUNNING:线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。

4)TERMINATE/DEAD:线程终结状态(runing执行完成、exception都会进入终结状态)

5)BLOCK:阻塞状态。sleep/join/等待用户输入-都可以使线程进入阻塞状态。在阻塞时间结束后,线程进入RUNNABLE状态。

6)WAITING:等待状态。在线程调用wait时进入等待状态,线程进入等待队列,直到被唤醒。

注释:synchronized锁池队列(未取到锁的线程进入BLOCK状态,等待锁被解开,回到RUNNABLE状态继续等待cpu分配时间片)。

三、sleep、wait、join和io的区别

wait:在synchronized获取锁后,调用wait()/wait(timeout)函数,线程进入WAITING状态,进入等待队列并且释放锁,释放cpu,等待notify()/notifyAll()被唤醒,让线程进入锁池队列。 

sleep:释放cpu,不释放锁。调用sleep()后,进入TIMED_WAITING阻塞状态,sleep时间结束后,线程进入RUNNING状态。

join:可以主线程进入TIMED_WAITING阻塞,让join的线程先执行完了,主程序再继续进入RUNNABLE状态。

四、补充知识

interrupt:停止线程信号。isInterrupted()后可以捕获InterruptedException异常,我们可以在捕获异常时关闭整个线程。

线程优先级:setPriority(0-10)//5 cpu时间片

守护线程:setDaemon(true),守护线程守护创建线程的线程(通常是主线程,并发框架中十分常见),在被守护线程结束时,守护线程自动终结。

附参考图片地址:https://www.cnblogs.com/hejing-swust/p/8038263.html


线程生命周期
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、前提 最近有点懒散,没什么比较有深度的产出。刚好想重新研读一下JUC线程池的源码实现,在此之前先深入了解一下J...
    Java_苏先生阅读 5,352评论 1 10
  • JAVA线程生命周期 摘要 本文详细总结了java线程的五种基本状态,和状态之间的转换关系;介绍了常见了创建线程的...
    yanzhelee阅读 11,053评论 0 9
  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 7,427评论 0 13
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,125评论 1 18
  • 看过多少次 舞台上的光鲜靓丽 典雅 大方 时尚 青春 自信....... 每次都羡慕说那是别人的故事 不可能渐渐成...
    知者仁者阅读 1,346评论 2 2

友情链接更多精彩内容