线程学习一
线程间有父子关系,称为线程间的层次关系,如图:
- 在java平台中,一个线程是否为守护线程取决于父线程。默认情况下,父线程是守护线程则子线程也是守护线程。
- 一个线程的优先级默认为该线程的父线程的优先级。
- 习惯上我们成某些子线程为
工作线程
或者后台线程
-
工作线程通常是其父线程创建来用于专门负责某项特定任务的执行的。
线程也有生命周期,现成的生命周期有三种状态:就绪,阻塞,运行。其可以 包括一下几种:
NEW
一个创建尔未启动的线程处于该状态RUNNABLE
包含两个子状态-
READY
表示处于该状态的线程可以被线程调度器进行调度而转变成为RUNNING
状态(活跃进程)
-
RUNNING
可以表示处于该状态的进程正在运行
BLOCKED
一个进程发起阻塞式I/O,或者申请一个由其他线程持有的独占资源时,便会处于该状态。不会占用处理器资源WAITING
一个线程执行了某些特定方法之后就会处于这种等待其他线程执行另外一些特定操作的状态TIMED_WAITING
和WAITING
类似,处于该状态的线程并非无限制地等待其他线程执行特定操作,而是处于带有时间限制的等待状态。当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程的状态自动转换为RUNNABLE
TERMINATED
已经执行结束的线程处于该状态。因为一个线程实例只能被启动一次,因此一个线程也只可能有一次处于该状态
重要:一个线程在其整个生命周期中,只可能有一次处于
NEW
和TERMINATED
状态
多线程有以下的优势:
- 提高系统的吞吐率
- 提高响应性
- 充分利用多核
- 最小化对系统资源的使用
- 简化程序的结构
但是也有自身的问题
- 线程安全问题
- 线程活性问题
- 上下文切换问题
- 可靠性
主要点:
- 进程是程序的运行实例
- 线程是进程中可独立执行的最小单位
- 应用程序负责线程的创建与启动
- 一个线程从其创建到运行结束的整个生命周期会经历若干状态
- 线程是多线程编程的基本单位
参照《Java多线程编程实战指南》