多线程
线程的生命周期
线程的生命周期是线程对象的生老病死,即线程的状态。
线程的生命周期可以通过 getState() 方法获得,线程的状态是 Thread.State 枚举类型定义的。又以下几种:
- NEW 新建状态。
创建了线程对象,在调用 start() 启动之前的状态。
Thread state for a thread which has not yet started. - RUNNABLE 可运行状态。
是一个复合状态,包含 READY 和 RUNNING 状态。READY 状态该线程可以被线程调度器进行调度使它处于 RUNNING 状态,RUNNING 状态表示该线程正在执行。Thread.yield() 可以把线程由 RUNNING 状态转换为 READY 状态。
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. - BLOCKED 阻塞状态。
线程发起阻塞的 I/O 操作,或者申请由其他线程占用的独占资源,线程会转为 BLOCKED 阻塞状态,处于阻塞状态的线程不会占用 CPU 资源,当阻塞的 I/O 操作执行完成,或者线程获得了其申请的资源,线程可以转换为 RUNNABLE。
Thread state for a thread blocked waiting for a monitor lock. A thread in the blocked state is waiting for a monitor lock to enter a synchronized block/method or reenter a synchronized block/method after calling {@link Object#wait() Object.wait}. - WAITING 等待状态。
线程执行了 object.wait(),thread.join() 方法会把线程转换为 WAITING 等待状态,执行 object.notify() 方法,或者加入的线程执行完毕,当前线程会转换为 RUNNABLE 状态。 - TIMED_WAITING
与 WAITING 状态类似,都是等待状态。区别在于处于该状态的线程不会无限的等待,如果线程没有在指定的时间范围内完成期望的操作,该线程自动转换为 RUNNABLE 。 - TERMINATED 终止状态
线程结束处于终止状态。