进程和线程的相关概念
概述
进程是一个运行中的应用程序
,一个进程是一个执行中的软件
- 每打开一个软件就相当于启动了一个进程 , 操作系统就会为该进程分配一个内存空间, 进程A和进程B的内存独立不共享
线程是由进程创建的,一个进程可以启动多个线程,线程是一个进程中的执行场景/执行单元
- 打开迅雷相当于启动了一个进程,在迅雷中下载多个文件,相当于迅雷进程开了多个线程
默认情况下整个进程的所有线程都结束才会造成我们的进程结束,main方法结束只是主线程结束了
,主栈空了其它的栈(线程)可能还在压栈弹栈
单线程
: 表示同一个时刻只允许执行一个线程多线程
: 表示表示同个一时刻可以执行多个线程,java中支持多线程机制,目的就是为了提高程序的处理效率
线程A和线程B共享堆内存和方法区内存
,但是线程A和线程B的栈内存独立
即一个线程一个栈
- 多线程并发: 启动10个线程就会有10个栈空间,每个栈和每个栈之间各自执行互不干扰,多个线程之间的关系是并发或者并行
并发和并行
并发和并行就是同时执行了多个线程出现的一种情况
并发
: 对于单核CPU同一时刻只能处理一件事情,但是由于CPU的处理速度极快,多个线程之间频繁切换执行,给人多个线程一起执行的感觉并行
: 对于多核CPU同一时刻多个任务可以同时执行,如4核CPU表示同一个时间点上可以真正的有4个进程并发执行
获取当前电脑的CPU数量RunTime类的availableProcessors方法
//单例设计模式
RunTime runtime = RunTime.getRunTime;
int cpuNums = runtime.availableProcessors();
System.out.println("当前电脑的cpu数量是" + cpuNums)
Java程序即进程
Java程序的流程
: 先启动JVM进程–>JVM再启动一个主线程负责调用main方法和一个垃圾回收线程负责看护回收垃圾(至少有这两个线程并发)
- 在主线程中执行线程对象的start方法又可以开启其他子线程,此时主线程和子线程同时执行,默认整个进程的所有线程都结束时才会造成我们的进程结束
使用jconsole命令
可以监控线程的执行情况