Java线程的生命周期(小白也能看懂)

什么是生命周期?

        所谓生命周期,我们可以理解为一个人从出生到死亡的过程,而线程也是如此,从我们new一个线程对象,到该线程终止的整个过程~~~~

 线程生命周期图解加解释(面试常问

 补充知识点:(个人理解)

        sleep:线程睡眠,不会释放锁,只是让线程处于暂停状态;

        wait:线程等待,会释放当前锁,需要获得锁才能继续执行;

        blockend:线程阻塞,由于线程没有获得锁对象,但等待时间又到时;

        notify:线程唤醒,唤醒某一个线程使之从等待状态变成可执行状态(获得锁);

以上是基于线程安全考虑,我们已经对其加锁的情况:

  • 首先,我们会先new一个线程对象,并start()启动它,此时线程为可运行状态;
  • 当线程执行完毕,或者出现异常时,线程会立即终止(也就是我们常说的死亡);
  • 在可运行状态,由于未锁对象,线程会进入阻塞(block)状态;
  • 当得到锁对象,线程会转换为可运行状态;
  • 在运行状态的程序,由于共享资源不满足条件,此时线程调用wait()方法等待,当释放共享资源的线程释放出满足条件的共享资源时,会唤醒(notify)相应的线程,此时线程如果得到锁对象,会转换为可运行状态,如若没获得锁对象会转换为阻塞状态,直至获得锁对象才会转为可运行状态;
  • 在可运行状态下的程序,调用sleep(毫秒值),线程进入计时等待状态,线程睡眠,此时不会释放锁对象,线程会僵持在哪儿,直至sleep时间到,线程继续执行,直至结束;
  • 在可运行状态下的线程,调用wait(毫秒值),线程进入计时等待状态,区别于sleep,线程会释放锁对象,此时类似于等待(wait)状态,但当等待时间到时,如果获得锁对象可直接进入可运行状态,否则阻塞;时间未到时可被唤醒,当获得锁对象转为可运行状态,否则阻塞;

心得:

        以上为个人自学所理解的,如若有误,还请指正!!!!

猜你喜欢

转载自blog.csdn.net/qq_61544409/article/details/126473361