线程的生命周期、线程的常用方法

Java知识点总结:想看的可以从这里进入

9.3、线程生命周期

image-20230206144459156

image-20230206145735758

9.4、常用方法

锁池和等待池的概念:

锁池:所有需要竞争同步锁的线程都会放在锁池当中,如果对象的锁被某一线程得到,此线程会进入就绪队列等待,其他线程需要继续等待。

等待池:调用wait方法后,线程会放在等待池,只有调用notify()[随机从等待池拿出一个线程放到锁池]、notifyAll()[将所有的线程放到锁池中]后才会竞争锁。

线程种常用的方法:

  • sleep():线程睡眠,是类Thread的方法。可以使线程暂时把CPU的权限释放,保持监控状态,当设定时间到期后,从新拿回cpu资源,继续执行。不会释放同步锁,所以即使让出了cpu,其它线程还是得不到锁进行执行。主要用于当前线程休眠或暂停操作

  • wait方法:

    • wait():线程等待,调用会释放本地锁,进入等待池,让其他线程获得锁进行执行,只有notify()、not ifyAll()调用才会进入锁池准备获取对象锁。需要依赖synchronized关键字,主要用于多线程之间的通信。
    • wait(long timeout):与wait()方法类似,唯一的区别就是在指定时间内,如果没有notify或notifAll方法的唤醒,也会自动唤醒。
  • yield():线程礼让,执行后线程进入就绪状态,释放cpu的执行权,但保留cpu执行资格,所以cpu有可能在下次执行时让此线程继续执行,只是提醒优先将资源给其他线程使用,不一定会生效。

  • 线程的优先级:在操作系统中,线程可以划分优先级,线程优先级越高,获得 CPU 时间片的概率就越大,但线程优先级的高低与线程的执行顺序并没有必然联系,优先级低的线程也有可能比优先级高的线程先执行。(低优先级只是获得调度的概率低,并非一定是在高优先级线程之后才被调用)

    • getPriority() **:**返回线程优先值
    • setPriority(int newPriority) **:**设置线程的优先级
    image-20220214163116300
  • join():线程进入阻塞状态,在线程B中调用线程A的join()方法,B会进入阻塞队列,直到A执行结束或中断

  • interrupt():线程中断,中断的时候会抛出异常,必须捕捉

  • notify():线程唤醒,唤醒此对象监视器上等待的一个线程,随机一个

  • notifyAll():唤醒此对象监视器的所有线程

  • start():是用来启动线程的,让线程处于就绪状态,可以执行线程外接下来的代码

  • run():线程体,是线程要执行的内容,当线程进入运行状态,开始执行run内的代码,执行完毕后,线程终止。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰 羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值