java多线程笔记补充之线程的生命周期

多线程通信的时候很容易造成死锁,死锁无法解决,只能避免:

当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不试图避免这种情况,所以程序员必须保证不导致死锁.

避免死锁法则: 当多个线程都要访问共享的资源A,B,C时,保证每一个线程都按照相同的顺序去访问他们,比如都先访问A,接着B,最后C.

--------------------

哲学家吃面条的故事

--------------------

Thread类中过时的方法:

suspend():使正在运行的线程放弃CPU,暂停运行.

resume():是暂停的线程恢复运行.

--------------------

注意:因为容易导致死锁,所以已经被废弃了.

死锁情况:

    A线程获得对象锁,正在执行一个同步方法,如果B线程调用A线程的suspend方法,此时A线程暂停运行,此时A线程放弃CPU,但是不会放弃占用的锁.

生命周期:一个事物从出生的那一刻开始到最终死亡中间的整个过程.

在事物的漫长的生命周期过程中,总会经历不同的状态(婴儿状态/青少年状态/中年状态/老年状态...).

线程也是有生命周期的,也是存在不同的状态的,状态相互之间的转换.

有人又把阻塞状态,等待状态,计时等待状态合称为阻塞状态.如下图.

---------------------------------------------------

线程对象的状态存放在Thread类的内部类(State)中:

注意:Thread.State类其实是一个枚举类.

   因为线程对象的状态是固定的,只有6种,此时使用枚举来表示是最恰当的.


1:新建状态(new):使用new创建一个线程对象,仅仅在堆中分配内存空间,在调用start方法之前.

   新建状态下,线程压根就没有启动,仅仅只是存在一个线程对象而已.

   Thread t = new Thread();//此时t就属于新建状态

    当新建状态下的线程对象调用了start方法,此时从新建状态进入可运行状态.

    线程对象的start方法只能调用一次,否则报错:IllegalThreadStateException.

2:可运行状态(runnable):分成两种状态,ready和running。分别表示就绪状态和运行状态。

  就绪状态:线程对象调用start方法之后,等待JVM的调度(此时该线程并没有运行).

  运行状态:线程对象获得JVM调度,如果存在多个CPU,那么允许多个线程并行运行.

3:阻塞状态(blocked):正在运行的线程因为某些原因放弃CPU,暂时停止运行,就会进入阻塞状态.

         此时JVM不会给线程分配CPU,直到线程重新进入就绪状态,才有机会转到运行状态.

         阻塞状态只能先进入就绪状态,不能直接进入运行状态.

   阻塞状态的两种情况:

            1):当A线程处于运行过程时,试图获取同步锁时,却被B线程获取.此时JVM把当前A线程存到对象的锁池中,A线程进入阻塞状态.

            2):当线程处于运行过程时,发出了IO请求时,此时进入阻塞状态. 

 

4:等待状态(waiting)(等待状态只能被其他线程唤醒):此时使用的无参数的wait方法,

       1):当线程处于运行过程时,调用了wait()方法,此时JVM把当前线程存在对象等待池中.

5:计时等待状态(timed waiting)(使用了带参数的wait方法或者sleep方法)

       1):当线程处于运行过程时,调用了wait(long time)方法,此时JVM把当前线程存在对象等待池中.

       2):当前线程执行了sleep(long time)方法.

6:终止状态(terminated):通常称为死亡状态,表示线程终止.

        1):正常执行完run方法而退出(正常死亡).

        2):遇到异常而退出(出现异常之后,程序就会中断)(意外死亡).

-------------------------------------------------------------------

线程一旦终止,就不能再重启启动,否则报错(IllegalThreadStateException).

在Thread类中过时的方法(因为存在线程安全问题,所以弃用了):

 void suspend() :暂停当前线程

 void resume() :恢复当前线程

 void stop() :结束当前线程


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值