Java 多线程(一)线程的生命周期 详解

线程的生命周期分为创建,就绪,运行, 阻塞,销毁5个状态;

1.创建状态:

在使用new关键字创建Thread类的时候,该线程对象就处于新建状态,这个状态一直保持到调用start方法的时候;

2.就绪态:

当调用线程的start方法时,会调用系统的本地方法,系统由运行态切换到内核态,来开辟一个线程,此时线程进入就绪态;
该线程位于就绪队列中等待获取CPU的时间片;
由于创建线程需要由运行态切换到系统内核,这是一个耗时的过程,所以在需要多次创建线程的时候,推荐使用线程池;

3.运行态:

如果就绪态的线程抢夺到了时间片,就可以调用run方法执行该线程的任务,此时该线程由就绪态转变为运行态;
运行态的线程可以通过调用对应的方法转变为阻塞状态,就绪态,和死亡态,这个下节阐述;

4.阻塞态:

如果线程调用sleep等方法,该线程就会由运行态转变为阻塞态,然后在睡眠时间结束之后,就会变为就绪态;

5.死亡态:

一个线程在完成任务或者是其他条件发生的时候,就会切换到死亡态;
杀死一个线程的方法(非自然死亡)1.使用stop方法强行终止线程,该方法已经被弃用;
调用stop方法会立即停止run方法的执行,包括在catch或finally语句中的操作,并抛出ThreadDeath异常;
因此可能会导致一些清理性的工作得不到完成,如文件,数据库的关闭;
调用stop方法会立即释放线程所持有的所有的锁,导致数据库得不到同步,出现数据不一致的问题;
2.使用推出标志位,使线程退出;
3.使用interrupt方法中断线程;
interrupt方法并不像for循环中的break语句一样,马上就停止循环;调用interrupt方法仅仅在当前线程上打一个停止的标记,并不是真正的停止线程;
也就是说线程并不会立即停止执行,而是什么时候停止完全有线程自行决定;如果中断后,线程立即无条件退出,那么我们会遇到stop方法的老问题;

中断线程详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值