线程生命周期

线程一共有5大状态。如图:

其中阻塞的方式有:

等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。

同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。

其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。

图片

 线程状态的具体形成条件为:

图片

这里着重说明造成阻塞状态的方法。

  • sleep():静态方法

           使线程休眠一段时间,将处于阻塞状态;

           休眠时间结束,就会进入就绪状态;

           每一个对象都有一个锁,sleep不会释放锁;

  • join ():实例方法

           合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞。

           通常用于在main()主线程内,等待其它线程完成再结束main()主线程,不会放弃锁资源。

  • yield ():静态方法

           让当前正在执行线程暂停,不是阻塞线程,而是将线程转入就绪状态;

  • wait():

             使线程挂起,进入等待阻塞;

             直到通过 notify() 或 notifyAll()唤醒,进入就绪状态;

             属于Object类方法。

线程其他的一些方法:

  • setDaemon():

           可以将指定的线程设置成后台线程即守护线程;

           守护线程(deamon)是程序运行时在后台提供服务的线程,并不属于程序中不可或缺的部分。

           当所有非后台线程结束时,程序也就终止,同时会杀死所有后台线程;

           虚拟机不用等待守护线程执行完毕;

           只能在线程启动之前把它设为后台线程;

  • setPriority(int newPriority):

           设置线程执行的优先级;

           优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高后调用优先级低的线程。;

           范围从1到10,默认为5;

           优先级的设定建议在start()调用前;

  • stop():

           停止线程,不推荐使用;

           而是提供一个boolean型的终止变量,当这个变量置为false,则 run()方法完成后线程终止。

 

关注公众号,可以免费获取毕业设计项目、各种免费软件、资料,笔记哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心之所向...

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

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

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

打赏作者

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

抵扣说明:

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

余额充值