Java线程
[TOC]
4. Java线程
4.1.
4.1.1. 线程的状态
1. 就操作系统层面来说,线程状态有五种:
● 新建状态new:创建一个新线程
● 就绪状态ready:启动该线程,此时可以CPU调度
● 运行状态running:此时CPU调用其并执行其任务
● 等待状态waiting:因为sleep、join等方法无法继续执行,但还没执行完,就进入等待状态
● 结束状态terminated:任务执行完毕,线程结束
2. 就Java层面来说状态有六种:
● 新建状态NEW:创建一个新线程
● 就绪/运行状态RUNNABLE:启动线程后进入可运行状态,此时可能正在被执行,可能不在执行中
● 阻塞状态BLOCKED:一般拿锁失败会进入阻塞状态,等待锁的释放
● 等待状态WAITING:可能是挂起线程池、wait方法、awiat方法等,需要手动唤醒
● 时间等待状态TIMED_WAITING:可能是sleep方法、join方法等,不需要手动唤醒
● 结束状态TERMINATED:线程执行完毕
// new:public static void main(String[] args) throws InterruptedException{ Thread t1 = new Thread(() => { }); System.out.println(t1.getState());}// runnable:public static void main(String[] args) throws InterruptedException{ Thread t1 = new Thread(() => { while(true){} }); t1.start(); Thread.sleep(500); System.out.println(t1.getState());}// blocked:public static void main(String[] args) throws InterruptedException{ Object obj = new Object(); Thread t1 = new Thread(() => { synchronized(obj){} }); //main线程拿到了锁 synchronized(obj){ t1.start(); Thread.sleep(500); System.out.println(t1.getState()); }}// waiting:public static void main(String[] args) throws InterruptedException{ Object obj = new Object(); Thread t1 = new Thread(() => { synchronized(obj){ try{ obj.wait(); } catch (InterruptedException e){ e.printStackTrace(); } } }); t1.start(); Thread.sleep(500); System.out.println(t1.getState());}// timed_waiting:public static void main(String[] args) throws InterruptedException{ Thread t1 = new Thread(() => { try{ Thread.sleep(1000); } catch (InterruputedException e){ e.printStackTrace(); } }); t1.start(); Thread.sleep(500); System.out.println(t1.getState());}// terminated:public static void main(String[] args) throws InterruptedException{ Thread t1 = new Thread(() => { try{ Thread.sleep(500); } catch (InterruputedException e){ e.printStackTrace(); } }); t1.start(); Thread.sleep(1000); System.out.println(t1.getState());}