• java 多线程笔记四 线程状态


    1,new新建

    new Thread(r)时,线程还没开始运行

    2,Runnable可运行状态

    一旦调用start方法,线程就处于可运行状态

    3,Blocked阻塞状态

    阻塞或等待状态时,线程暂时是不活动的,它不运行任何代码,而且消耗最少的资源。

    当一个线程获取一个内部的锁对象时,这个锁被其他线程占用。

    4,Waiting无限等待状态

    使用锁对象调用wait方法时

    5,Timed waiting 计时等待状态

    调用sleep方法或者wait(long timeout)方法时

    6,Terminated终止状态

    run方法执行完,或者出现异常未捕获而终止。


    线程状态的的切换:

    1,调用wait方法和notify方法都需要相同的锁对象才可以

    2,使用锁对象调用wait方法进入无限等待状态

    3,使用notify方法唤醒无限等待状态的线程

    4,调用sleep方法线程进入计时等待状态,那么该线程就不会霸占cpu资源

    5,调用wait方法进入无线等待状态,那么该线程不会霸占cpu资源,也不会霸占锁对象

    6,进入无限等待状态的线程,如果被其他线程唤醒,但是没有获取到锁对象,那么就进入到了锁阻塞状态

    7,通过wait(long Timeout)进入计时等待状态,如果时间到了被唤醒并且获取到锁对象那么就进入可运行状态,如果没有获取到锁对象那么就进入锁阻塞状态。如果时间没到被唤醒并且获取到锁对象那么就进入可运行状态,如果没有获取到锁对象那么就进入锁阻塞状态。


    1. public class Test {
    2. public static void main(String[] args) {
    3. //线程1 无线等待状态
    4. new Thread(()->{
    5. synchronized (Test.class) {
    6. //加锁快捷键ctrl+alt+t
    7. System.out.println(Thread.currentThread().getName()+"进入无限等待状态");
    8. try {
    9. Test.class.wait();//释放锁不会争夺cpu
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. }
    13. System.out.println(Thread.currentThread().getName()+"被唤醒");
    14. }
    15. }).start();
    16. //线程2 唤醒线程1无限等待状态
    17. new Thread(()->{
    18. synchronized (Test.class) {
    19. //加锁快捷键ctrl+alt+t
    20. System.out.println(Thread.currentThread().getName()+"唤醒无限等待状态");
    21. //唤醒
    22. Test.class.notify();
    23. //等待5秒后再释放锁,上面虽然唤醒了线程一,但是线程一并拿不到锁,所以会等待5秒
    24. try {
    25. Thread.sleep(5000);//sleep并不会释放锁
    26. } catch (InterruptedException e) {
    27. e.printStackTrace();
    28. }
    29. System.out.println(Thread.currentThread().getName()+"执行完毕");
    30. }
    31. }).start();
    32. }
    33. }

  • 相关阅读:
    Oracle表被truncate(截断),该如何恢复?
    基于Java+SpringBoot+Vue校园求职招聘系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
    Linux常用操作
    读书会 | 第一季读书会《蛤蟆先生去看心理医生》完美收官啦
    【Git】常用命令大全
    前端研习录(08)——文档流
    LTSPICE Tutorial
    idea项目一直在build
    Android XML文件结构 和 用XmlPullParser 来解析xml文件
    Android 10.0 禁止弹出系统simlock的锁卡弹窗功能实现
  • 原文地址:https://blog.csdn.net/qq_42572322/article/details/125548110