Java虚拟机中线程的状态可以为且同时只能为以下6种之一,这些状态只是JVM定义的线程状态,不代表任何操作系统的线程状态.
1.NEW
线程被创建了,但没有调用start()方法
Thread t = new TestThread(); //创建线程,此时处于NEW状态
2.RUNNABLE
线程处于(可)运行状态,但也可能在等待CPU等资源
或者等待IO,比如socket的等待数据流
3.BLOCKED
线程处于等待某个锁的状态
4.WAITING
当线程调用一下方法之一后进入WAITING状态
a.wait() ;
b.join();
c.LockSupport.park()
5.TIMED_WAITING
线程等待某个时间段过去,
当线程调用一下方法之一后进入WAITING状态
a.wait() with time anout
b.join() with timeout
c.sleep(xxx);
d.LockSupport.parkNanos
e.LockSupport.parkUntil
6.TERMINATED
线程终止
[color=red][b]特别注意Blocked和Wating状态的不同,前者是线程在锁的block队列里面,当锁被释放时可以去竞争锁的所有权,但是处于Waiting状态的线程必须被另外线程通过相应的方法唤醒,否则将永远保持Waiting状态[/b][/color]
1.NEW
线程被创建了,但没有调用start()方法
Thread t = new TestThread(); //创建线程,此时处于NEW状态
2.RUNNABLE
线程处于(可)运行状态,但也可能在等待CPU等资源
或者等待IO,比如socket的等待数据流
3.BLOCKED
线程处于等待某个锁的状态
4.WAITING
当线程调用一下方法之一后进入WAITING状态
a.wait() ;
b.join();
c.LockSupport.park()
5.TIMED_WAITING
线程等待某个时间段过去,
当线程调用一下方法之一后进入WAITING状态
a.wait() with time anout
b.join() with timeout
c.sleep(xxx);
d.LockSupport.parkNanos
e.LockSupport.parkUntil
6.TERMINATED
线程终止
[color=red][b]特别注意Blocked和Wating状态的不同,前者是线程在锁的block队列里面,当锁被释放时可以去竞争锁的所有权,但是处于Waiting状态的线程必须被另外线程通过相应的方法唤醒,否则将永远保持Waiting状态[/b][/color]