今天就跟大家聊聊有关java中的线程状态有几种,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
线程的状态
线程有如下6种状态:
New
(新创建 )
Runnable
(可运行)
Blocked
(被阻塞)
Waiting
(等待)
Timed waiting
(计时等待)
Terminated
(被终止)
其中,要获取一个线程当前的状态,可以调用getState 方法。
下面,对每种状态进行解释
1.新创建线程(New)
当我们使用new操作符来创建了一个线程时,如使用new Thread(r)时,线程还未开始运行,线程中的代码也没有开始执行,此时就成为New状态。
2.可运行线程(Runnable)
当我们对一个线程执行start()方法后,就会启动该线程。但是注意,一个处于可运行状态的线程可能正在运行也可能没有运行,这时取决于操作系统的时间片调度。抢占式调度系统会给每一个线程分配一个时间片来运行,在时间片使用完后,操作系统就会剥夺它运行的权力,并更根据优先级选择下一个要运行的线程。
3.被阻塞、等待状态(Blocked、waiting、Timed waiting)
当一个线程处于阻塞和等待状态时,它不做任何工作,也不执行任何代码。直到操作系统重新激活它。
当一个线程试图获取一个内部对象锁,而这个锁又被其它线程持有时,该线程就进入阻塞状态,当其它线程释放这个锁后,并且线程调度器允许该线程持有它时,该线程将会变成非阻塞状态。
当线程等待另一个线程通知调度器一个条件时,它自己就进入等待状态,再调用Object.wait方法或者Thread.join方法时,就会出现这种情况。被阻塞状态和等待状态时大有不同的。
有几个方法有一个超时参数。调用它们导致线程进入计时等待状态这一状态将一直保存到超时期满或者接收到适当的通知。带有超时参数的方法有:Thread.sleep
和 Object.wait
、Thread.join
、 Lock,tryLock
以及 Condition.await
的计时版。
4.被终止的线程
线程终止有两种原因:
因为run()方法执行完毕正常退出
因为一个没有捕获的异常而终止了run方法导致意外死亡
5.总结
看完上述内容,你们对java中的线程状态有进一步的了解吗?如果还想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。