线程的生命周期和触发的机制

前言:
1.什么是线程?在操作系统中,线程是比进程更小的能够独立运行的基本单位,同时也是CPU调度的基本单位,线程本事不拥有系统资源,只是拥有一些运行时需要用到的系统资源,如程序计数器、寄存器、和栈。一个进程中素有的线程可共享进程中的所有资源
2.什么是多线程?多线程可以理解为在同一个程序中n能够同时运行多个不同的线程来执行不同的任务,这些线程同时利用CPU的多个核心运行。多线程编程能够最大限度的利用CPU调度

如何实现线程?
1.在java中实现线程的大体分为三种,,通过继承Thread类、是实现Runnablej接口、实现Callable接口

 
  1. public class LearnThread extends Thread {
  2. @Override
  3. public void run() {
  4. // TODO Auto-generated method stub
  5. super.run();
  6. }
  7. }
  8. class LeanRunnable implements Runnable {
  9. @Override
  10. public void run() {
  11. // TODO Auto-generated method stub
  12. }
  13. }
  14. class LearnCallable implements Callable<String> {
  15. @Override
  16. public String call() throws Exception {
  17. // TODO Auto-generated method stub
  18. return null;
  19. }
  20. }

2.线程的生命周期

java线程的五种基本状态
1.新建状态(new):当线程对象创建后,即进入新建状态,如Thread t=new MyThread();
2.就绪状态(Runnable):当调用线程对象的start()方法(t.start()),线程即进入就绪状态,处理就绪状态线程,只是说明当前线程做好了准备,随时准备等待CPU调度执行,并不是说执行了t.start()就会立即执行
3.运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时的线程才开始被执行,即进入到运行状态,PS:就绪状态是进入运行状态的唯一入口,也就是说,线程想进入运行状态,必须先处于就绪状态
4.阻塞状态(Blocked):处于运行状态的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入就绪状态,才有机会再次被CPU调用进入就绪状态,根据阻塞产生的原因不同,阻塞状态又可以分为三种:
等待阻塞:运行状态线程执行wait()
同步阻塞: 线程在获取synchronized同步锁失败(因为锁被其他线程所占用),它会同步进入同步锁阻塞
其他阻塞:通过调用线程的sleep()或join()或发送I/O请求时,线程会进入阻塞状态,当sleep()状态超时、join()等待超时线程终止或者超时,或者I/O处理完成完毕,线程重新转入就绪状态
5.死亡状态:线程执行完或者因异常退出了run()方法,该线程生命周期

就绪状态转为运行状态:当前线程获取处理器资源
运行状态转为就绪状态:当前线程调用了yeid()或者在运行过程中失去了处理器资源
运行状态转为死亡状态:当前线程执行完毕或出现异常

ps:当调用线程的yield()方法时,线程从运行状态转换为就绪状态,但接下来CPU调度就绪状态中的哪个线程具有一定的随机性,因此,可能会出现A线程调用了yield()方法后,接下来CPU仍然调度了A线程的情况。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值