进程
进程(process)是程序的运行实例
运行一个Java程序的实质是启动一个Java虚拟机进程
进程是程序向操作系统申请资源(如内存空间、文件句柄)的基本单位
线程
线程(Thread)是进程中可独立执行的最小单位
一个进程可以包含多个线程
同一个进程中的所有线程共享该进程中的资源
线程要完成的计算称为任务
start
方法只能调用一次,否则会跑出IlegalThreadStateException
创建一个线程与创建其他类型的Java对象不同的是,Java虚拟机会为每个线程分配调用栈(Call Stack)所需的内存空间
调用栈用于跟踪Java代码(方法)间的调用关系以及Java代码对本地代码(Native Code)的调用
创建线程对象比创建其他类型的成本要高一些
线程的属性(除了id
外)都是可读写的属性
Java线程的优先级并不能保证线程按照其优先级高低的顺序执行
守护线程
线程的daemon属性来设置是否是守护线程
守护线程(Daemon Thread)不会影响虚拟机的正常停止
一个Java虚拟机只有在其所有的用户线程(非守护线程)都运行结束的情况下才能正常停止
一个线程是否是一个守护线程默认情况下取决于其父线程是否是守护线程,也就是说默认情况下,老子是啥,儿子就是啥
一个线程的优先级默认为该父线程的优先级,还是那句话,默认情况下,老子是啥,儿子就是啥
父线程和子线程之间的生命周期没有必然联系
线程的生命周期

一个线程在整个生命周期过程中,有且仅有一次
是出于New状态
和Terminated状态
的
线程转储(Thread Dump)
jstack -l PID
jvisualvm
Java Mission Control(JMC)
多线程的优势和风险
优势
- 提高系统的吞吐率(Throughout)
- 提高系统的响应性(Responsiveness)
- 充分利用多核处理器资源
- 最小化系统对资源的使用----资源共享
风险
- 线程安全问题
- 线程活性(Thread Liveness)问题
死锁 活锁 线程饥饿 - 上下文切换(Context Switch)
- 可靠性
网友评论