java中线程的状态包括,java线程的五个状态
如何解决写爬虫IP受阻的问题?立即使用。
Java线程可以创建,也可以销毁,所以线程是有生命周期的,线程的生命周期可以用线程的六种状态来描述。
从Thread类的源码中可以看出线程一共有6种状态:
这六种状态分别是:
1.New:初始状态,创建线程,不调用start()。
2.可运行:运行状态。Java线程将操作系统中的就绪和运行状态称为“运行中”。
3.阻塞:阻塞,线程进入等待状态,由于某种原因线程放弃了使用CPU的权利。
几种拥塞情况:
A.等待阻塞:正在运行的线程执行wait(),JVM会将当前线程放入等待队列。
B.同步阻塞:当正在运行的线程获得对象的同步锁时,如果同步锁被其他线程占用,JVM会将当前线程放入锁池。
C.其他阻塞:当正在运行的线程执行sleep(),join()或者发出IO请求时,JVM会将当前线程设置为阻塞状态。当sleep()结束时,join()线程终止,IO进程结束,线程再次恢复。
4.等待:等待状态。
5.timed_waiting:超时等待状态,超时后自动返回。
6.终止:终止状态,当前线程已经执行完毕。
线程的六种状态之间的转换:
当线程被实例化时,它首先进入初始状态,即新状态。此时,线程在启动时不会立即运行,而是在被操作系统调度后才运行。然后调用start()进入运行状态,即runnable,包括运行和就绪两种状态。如果运行线程时间片被CPU抢占,这两种状态可以在操作系统的调度下相互转换。运行线程通过调用synchronized方法或synchronized block进入阻塞状态,即阻塞,线程获得锁后进入运行状态;如果一个线程调用sleep(),wait()。join()、locksupported.parkutil()等方法在执行过程中,会进入等待状态或者超时等待状态,即timed_waiting。当再次调用notify()、notify all()、locksupported.unpark()等方法时,线程会进入等待状态。
注意:Locksupported是JDK 1.6提供的一个工具类。在java.util.concurrent包中,它提供的park,unpark方法比wait,notify方法更灵活。
通过命令行的方式查看线程状态
首先介绍两个命令:
1.jps:JDK 1.5提供的显示当前所有Java进程的PID的命令可以获取相应的进程PID。
2.Jstack:是Java虚拟机自带的堆栈跟踪工具。它可以打印出远程调试服务的给定进程pid信息和Java栈信息。
具体操作步骤:
打开终端或命令行工具,输入jps命令获取pid;
输入jstack pid查看当前进程的信息。
PHP中文网站,有很多免费的JAVA入门教程,欢迎学习!这就是java线程的几种状态的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。