博客导航
Java中线程的状态分为6种。早期的线程模型只有5种状态。
sun.misc.VM类
/* The threadStatus field is set by the VM at state transition
* in the hotspot implementation. Its value is set according to
* the JVM TI specification GetThreadState function.
*/
private final static int JVMTI_THREAD_STATE_ALIVE = 0x0001;
private final static int JVMTI_THREAD_STATE_TERMINATED = 0x0002;
private final static int JVMTI_THREAD_STATE_RUNNABLE = 0x0004;
private final static int JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400;
private final static int JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010;
private final static int JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020;
Thread.State枚举类
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
- NEW:初始状态,线程被构建,还未调用start()方法;
- RUNNABLE:运行状态,在java多线程模型中,就绪和运行都是运行状态;
- BLOCKED:阻塞状态,线程阻塞于锁;
- WAITING:等待状态,需要等待其他线程做出一些特定动作(通知或中断)。比如中断,需要其他的线程来唤醒;
- TIME_WAITING:超时等待,可以在指定的时间内自行返回;
- TERMINATED:终止状态,线程执行完毕。
一些线程的方法
start 启动线程
setName 设置线程名称
setPriority 设置线程优先级,默认5,取值1-10
join 挂起线程xx毫秒,参数可以不传
interrupt 终止线程
isAlive 测试线程是否处于活动状态
yield 暂停当前执行的线程对象,并执行其他线程
sleep 挂起线程xx秒,参数不可省略
currentThread 返回对当前正在执行的线程对象的引用
holdsLock 当前线程是否拥有锁
创建线程有两种方式
(1)继承Thread类
(2)实现Runnable接口
(3)通过Callable和Future创建线程
相关链接:
java8网上源码
java7的thread源码位置