一些基本概念:
1.进程与线程:
进程: Process,是程序运行的实例。任务管理器有进程栏。
线程:Thread,是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位。是进程中独立执行的最小单位,CPU的最小调度单元。
2.java内存划分:
堆:
存放new的对象和数组
可以被所有线程共享
栈:
存放基本变量类型(会包含该基本类型的具体值)
引用对象的变量(存放该引用在堆里面的具体地址)
线程私有。
方法区:
包含所有的class和static变量
所有线程共享
3.创建线程的两种方式:
创建Thread的子类:基于继承(Inheritance)的技术。
以Runnable接口实例为构造器参数直接通过new创建Thread实例:基于组合(Composition)的技术。耦合性(Coupling)相对上一种更低,推荐优先选用。
4.Thread类常用方法:
| 方法 | 功能 | 备注 |
|---|---|---|
| static Thread currentThread() | 返回当前代码的执行线程(对象) | 同一段代码的Thread.currentThread()的调用,其返回值可能对应不同的线程(对象) |
| void run() | 用于实现线程的任务处理逻辑 | 一般由Java虚拟机直接调用,程序不应该调用该方法。 |
| void start() | 启动相应线程 | 该方法的返回不代表相应线程已经启动。一个Thread的start方法只能被调用一次,多次调用会抛出异常。 |
| void join() | 等待相应线程运行结束 | 线程A调用线程B的join方法,那么线程A会被暂停,直到线程B运行结束。 |
| static void yield() | 使当前线程主动放弃对处理器的占用,可能导致当前线程被暂停 | 不可靠。该方法被调用时当前线程可能仍然继续运行。 |
| static void sleep(Long millis) | 使当前线程休眠(暂停运行)指定的时间 |
5.守护线程和用户线程:
通过线程的daemon属性表示:该属性默认值与该线程父线程的属性值相同。
守护线程:不会影响Java虚拟机的正常停止。如垃圾回收线程。
用户线程:会阻止Java虚拟机的正常停止(无法阻止强制停止)。
6.线程的生命周期:

参考: Java多线程编程实战指南(核心篇)