1、System.exit(1);
这种情况下,当前方法执行线程waiting状态
2、阻塞
想都别想了,阻塞的话,线程也是waiting状态
3、死锁(互相等待)
一开始是runnable,哪怕被锁线程方法1000毫秒,一样到最后,等待线程的状态变为BLOCK,这是一个重要结论
4、无限循环
无限for循环,线程状态为runnable
5、如果方法里面有sleep延时——Thread.sleep(1000)
则当前线程是runnable,在没有调用Thread.sleep(1000)之前,如果调用了之后,那么状态就是TIMED_WAITING
6、内存溢出,服务就挂了,也别妄想什么线程在跑了,该任务所在的java虚拟机上所部署的服务挂了,,,线程没了,停了
原文:https://www.cnblogs.com/cyh2009/p/11053274.html