1. 基本知识

进程

进程(process)是程序的运行实例

运行一个Java程序的实质是启动一个Java虚拟机进程

进程是程序向操作系统申请资源(如内存空间、文件句柄)的基本单位

线程

线程(Thread)是进程中可独立执行的最小单位

一个进程可以包含多个线程

同一个进程中的所有线程共享该进程中的资源

线程要完成的计算称为任务

start方法只能调用一次,否则会跑出IlegalThreadStateException

创建一个线程与创建其他类型的Java对象不同的是,Java虚拟机会为每个线程分配调用栈(Call Stack)所需的内存空间

调用栈用于跟踪Java代码(方法)间的调用关系以及Java代码对本地代码(Native Code)的调用

创建线程对象比创建其他类型的成本要高一些

线程的属性(除了id外)都是可读写的属性

Java线程的优先级并不能保证线程按照其优先级高低的顺序执行
守护线程

线程的daemon属性来设置是否是守护线程

守护线程(Daemon Thread)不会影响虚拟机的正常停止

一个Java虚拟机只有在其所有的用户线程(非守护线程)都运行结束的情况下才能正常停止

一个线程是否是一个守护线程默认情况下取决于其父线程是否是守护线程,也就是说默认情况下,老子是啥,儿子就是啥

一个线程的优先级默认为该父线程的优先级,还是那句话,默认情况下,老子是啥,儿子就是啥

父线程和子线程之间的生命周期没有必然联系

线程的生命周期
image.png

一个线程在整个生命周期过程中,有且仅有一次是出于New状态Terminated状态

线程转储(Thread Dump)

jstack -l PID

jvisualvm

Java Mission Control(JMC)

多线程的优势和风险

优势
  1. 提高系统的吞吐率(Throughout)
  2. 提高系统的响应性(Responsiveness)
  3. 充分利用多核处理器资源
  4. 最小化系统对资源的使用----资源共享
风险
  1. 线程安全问题
  2. 线程活性(Thread Liveness)问题
    死锁 活锁 线程饥饿
  3. 上下文切换(Context Switch)
  4. 可靠性
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 2,172评论 0 9
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 5,137评论 0 23
  • 本篇文章的主要内容如下: 1、Java线程概念2、Android线程的实现3、线程的阻塞4、关于线程上下文切换5、...
    Sophia_dd35阅读 560评论 0 3
  • 先上两张前后对比图吧: 我是混合肌肤,从上大一开始,光光的脸上就开始疯狂的长痘痘,可以毫不夸张的说,如雨后...
    柚子芒芒阅读 2,167评论 17 15
  • 9.16 2.13两 多多因为地板凉的原因 感冒加严重咳嗽 好心疼 去西尔小宠配了点药 希望多多快点好起来
    turbozhang阅读 190评论 0 0