小鸭子的学习笔记duck

Duck Blog

唐如飞

( ^∀^)/欢迎\( ^∀^)

79 文章数
14 评论数

线程的状态

tangrufei
2022-08-27 / 0 评论 / 292 阅读 / 0 点赞

线程

1.线程的状态

1.初始化状态

  • 创建线程的几种方式

    • 1.继承thread,重写run方法

    • 2.实现runable接口

      • callable有返回值,相当于是runnable的补充
    • 3.实现callable接口

    • 4.通过线程池创建

2.准备就绪状态((尚未启动状态new))

  • start()方法,等待cpu指针去找到这个线程,并且执行它

3.运行时状态(正在执行runnable)

  • 还是执行了start()方法,只不过cpu指针已经指向该线程,该线程已经获取到cpu的执行资源

    • run方法和start方法的区别:start用于启动线程,start()只能调用一次(线程状态不可逆,Thread在start源码中,当线程状态不为new时,再次调用会抛出异常);run方法用于执行线程运行时的代码,run()可以被重复调用
    • start(),执行时相当于创建了两个线程,一个主线程执行当前方法,一个thread线程执行run方法,执行完成thread线程回到主线程;而run方法直接调用的执行代码,相当于直接开启线程
    • run是方法级别的调用(一个线程执行主方法和run方法),start是线程级别的调用(一个线程执行主方法,在开启一个Thread线程执行run方法,执行完成之后回到主线程)

4阻塞(被同步锁阻塞blocked)

  • sleep()睡眠,wait()等待

    • sleep:thread的方法,时间到了以后会自动唤醒,它是将锁资源占用,唤醒之后直接继续执行

      • 在使用过程种不会释放对象锁
    • wait是object的方法,它一定需要notify()方法进行唤醒,并且它睡眠时就进入到了等待区域,释放了锁的资源

      • notify()和notifyAll的区别:notify()只会唤醒一个线程,由虚拟机控制;notifyAll会将所有线程放到锁池,参与锁的竞争,竞争成功就执行,竞争失败,则留在锁池

5.结束

  • 1.必须等到线程执行完
  • 2.stop()方法能够让线程停止运行,jdk1.5之后就被弃用了,
  • 3.interrupt()是用来终止线程的

怎么保证线程执行顺序

  • join():是Theard的方法,作用是调用线程需等待该join()线程执行完成后,才能继续用下运行。

  • wait():是Object的方法,作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)

  • 打断线程的话有stop和interrupt,一般会使用interrupt一个正在运行的线程,如果是stop的话是强行终止。

文章不错,扫码支持一下吧~
上一篇 下一篇
评论
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月