多线程运行的几种状态,以及之间的关联

New 已创建但还未启动

Runnable 一旦调用start之后就是runnable(可运行) 对应了ready和running cpu在分配中也是runnable

Blocked 锁 进入synchronized修饰的代码块

Waiting(等待)

Timed Waiting(计时等待)

Terminated(终止)

 

通过 thread.getState()获取现在线程的状态

 

所有的关系我们可以围绕Runnable展开来说,因为与其有着密切的联系

当然首先是线程的创建就是New,通过thread.start()方法

创建之后,就是可运行状态(Runnable)

1.我们说下和Blocked(阻塞)的关系,他们是可以互相转化的,在Runnable状态的时候,代码进入到synchronized修饰的代码块或者方法的时候。就进入了Blocked状态,也就是通常说的被阻塞,程序会一直等到运行结束。获取到monitor锁,并且释放锁之后,才会再次进入Runnable状态

2.Waiting与Runnable的关系,代码中一旦遇到Object.wait()或者Thread.join()等(LockSupport.park())的时候,代码就会进去到Waiting状态,如果想回到Runnable就必须要唤醒这个线程,通过他们各自对应的方法,Object.notify()、Object.notifyAll()、LockSupport.unpark()就会转为可运行状态,要知道的是notify和notify

上一篇:线程状态


下一篇:2020-12-22