线程的生命周期
上片文章中我们讲了java中并发线程的概念和用法,这篇文章我们将要介绍java并发线程的生命周期,这对我们深入理解并发线程具有极大的帮助。
操作系统中线程的生命周期(非Java中的)
操作系统中线程的生命周期的基本状态为新建,就绪,运行,阻塞,终止(实际上还有挂起,静止就绪,活动就绪等,但我们这节主要讲的是基本生命周期,暂不考虑挂起状态)。
其中
就绪态为线程中除处理机以外的其他工作已完成,只需要等待处理机的调度就行
。
运行态为线程已获得处理机的调度,而且获得处理机使用的时间,线程已经在执行的过程中。
阻塞态为线程因等待条件(如I\O设备未准备好,需要等待线程运算后的数据等)而暂停执行,条件满足后回到就绪态。
终止态为线程已完成执行或者异常退出。资源将被回收(但有些可能保留)如返回值。
java中的线程的生命周期
java中线程的生命周期分为多个状态,由java.lang.Thread.State枚举定义
java中线程的生命周期与操作系统中的大部分一致,他分别是新建,可运行,阻塞,等待,计时等待,终止
java线程状态是JVM对操作系统原生线程的抽象,两者并非严格对应。例如:
JVM的RUNNABLE可能对应操作系统的就绪/运行。
JVM的BLOCKED和WAITING在操作系统层面可能均表现为阻塞。
新建(new):线程对象被创建但未调用start()方法,此时线程未开始执行。
可运行(runnable):调用start()方法后,线程进入可运行态,等待CPU调度。.包含两张情况:
就绪(ready):线程在就绪队列中,等待分配处理机
运行中(running):线程正在执行过程中。
线程在RUNNABLE时可能在等待CPU(就绪)或已在执行(运行)。
阻塞(blocked):线程因等待获取锁(如synchronized代码块或方法)而被阻塞,直到锁被释放。
等待(waiting):线程主动调用Object.wait()、Thread.join()或LockSupport.park()进入 无限期等待,需其他线程唤醒。
超时等待(time_waiting):带有计时的等待,超时后自动恢复运行态。
终止(terminated):线程执行完run()方法或为抛出未捕获异常,生命周期结束。
启动线程时的start()方法是从新建态到可运行态
休眠:sleep(long.millis)方法是从可运行态到超时等待。
等待锁:进入synchronized块(可运行到阻塞)。等待锁(Wait Lock)是数据库或并发编程中用于控制资源访问的机制。当多个事务或线程竞争同一资源时,未获得锁的事务/线程会进入等待状态,直到锁被释放。这种机制确保数据一致性和避免冲突。)
唤醒线程:notify()/notifyAll()(等待/超时等待到可运行)。

被折叠的 条评论
为什么被折叠?



