提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言一、Java的线程状态有哪些?二、Java线程之间如何转换?总结前言
最近学习总结Java多线程的知识,知识点繁杂,随笔总结,也希望能养成定期写作的好习惯,同时希望能够对其他小伙伴提供帮助。
一、Java的线程状态有哪些?
二、Java线程之间如何转换?
简单总结以下几种线程相关的方法:
1.wait()------notify()/notiftAll()
wait()方法分为两种:1.无参数:调用wait()方法后,线程进入等待队列,同时该线程会释放所有资源(包括锁资源),线程不能自主醒来,只能通过notify()或notifyAll()方法唤醒。2.有参数:啊参数单位位毫秒,在给定参数毫秒时间后,线程醒来。 注:1.因为存在释放锁的操作,因此wait()方法只能用于synchronized函数或synchronizedblock中进行调用。2.notity()方法是随机唤醒一个调用该对象的wait()方法而阻塞的线程,因此在使用时需要特殊注意,可能需要唤醒的线程不一定被唤醒。notifyAll()则可以唤醒所有该对象因调用wait()方法而进入阻塞的线程。
2.sleep()
sleep(毫秒),指定以毫秒为单位的时间,使线程在该时间内进入线程阻塞状态,方法执行结束,线程重新进入可执行状态。(不会释放锁资源)
3.suspend()------resume()(已弃用)
调用该方法后,线程进入挂起状态,此过程不会释放锁资源,只能通过resume()方法才能唤醒线程,重新进入可执行状态。很容易导致死锁,因此被弃用。
4.yield()
调用该方法后,线程重新回到就绪状态,于sleep()类似,区别在于不能设置暂停时间。
5.join()
当主线程开启一个或多个子线程的时候,使用join方法,必须等该线程运行结束,主线程或其他子线程才由阻塞状态转为可执行状态。
如有错误,望大家批评指正。
参考:JVM中线程的状态转换图_zolalad的专栏-CSDN博客_线程状态转换图