Java线程的6种状态

Java线程有六种状态

public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;
}

1.New
New状态指的是线程被声明出但是还没有调用start方法时的状态。
注:start方法可以被重复调用吗?

public synchronized void start() {
       if (threadStatus != 0)
            throw new IllegalThreadStateException();

      
        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }


我们看下start方法的内部源码,可以看出threadStatus的值不为0的话,会抛出IllegalThreadStateException;经过打断点运行。发现第二次调用start方法时,threadstatus已经不为0。
2.RUNNABLE
我们看下官方API对RUNNABLE状态的解释。

/**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */

我们可以看出RUNNABLE状态相当于操作系统线程中ready和running两个状态
3.BLOCKED状态
阻塞状态,处于阻塞状态的线程正在等待锁的释放。类似于食堂的排队买饭的情况。
4.WAITING状态
等待状态,等待状态的线程需要别的线程赖唤醒它。
要进入等待状态,可以使用下面的三个方法:
Object.wait();使线程处于等待状态直到别的线程来唤醒它,这个过程首先需要线程持有锁,然后执行方法以后会释放锁。
Thread.join();等待执行该方法的线程执行完,底层调用的是Object.wait方法
LockSupport.park();除非调度许可,否则禁止当前线程调度。
5.TIMED_WAITING状态
超时等待状态,处于超时等待的线程到时间后悔自动唤醒。
Thread.sleep(Long miis);使当前线程睡眠指定时间,这个过程不释放锁
Object wait(Long miis);使当前线程休眠指定时间,释放锁,可以通过notify/notifyAll唤醒
Thread.join(Long miis);等待当前线程最多执行指定时间。
LockSupport.parkNanos(long nanos);除非获得调度许可,否则禁止当前线程进行调度指定时间
LockSupport.parkUntil(long deadline);除非获得调度许可,否则禁止当前线程进行调度指定时间
6.TERMINATED状态
终止状态。此时线程已执行完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值