-
程序:包含指令和数据的文件
-
进程:一个程序执行的完整过程,是操作系统分配资源的最小单位
-
线程:最小执行单位
-
并发:多个线程在同一个CPU上执行
-
并行:多个线程在不同CPU上执行
6.进程和线程区别?
- 根本区别:进程是操作系统分配资源的最小单位;线程是最小执行单位
- 资源开销:每个进程都有自己独立代码副本和数据空间,进程之间的切换,资源开销较大;线程可以看做轻量级的进程,每个线程都有自己独立的运行栈和程序计数器,线程之间切换,资源开销小
- 包含关系:一个进程包含有多个线程,在执行过程中,线程的执行不是线性串行的,而是多条线程并行共同完成;
- 内存分配:同一进程内的所有线程共享本进程的内存空间和资源;进程之间的内存空间和资源相互独立
- 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响;一个线程崩溃,会导致整个进程退出。所以多进程要比多线程健壮
- 执行过程:每个独立的进程有程序运行的入口和程序出口。但是线程不能独立执行,必须依存在应用程序(进程)中,由应用程序提供多个线程执行控制。
7.JVM由那些线程组成?
- 主线程 main
- 清除reference线程 Reference Handler
- 调用对象finalize方法的线程 Finalizer
- 分发处理给JVM信号的线程 Signal Dispatcher
- 添加事件监听器 Attach Listener
- idea工具独有线程(run模式)
线程基本概念
- 单线程:单线程就是进程中只有一个线程。单线程在执行顺序时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
- 多线程:由一个以上的线程组成的程序称为多线程。Java中,一定是从主线程开始执行,然后在主线程的某个位置创建并启动新的线程。
线程的创建与启动
- 创建线程:创建Thread对象
- 线程的实现方式:
- 继承Thread类
- 实现Runnable接口 没返回值 run方法
- 实现Callable接口 返回值是泛型 通过FutureTask转换(Runnable) call方法
- 线程池
- 线程启动: 通过调用Thread对象的start()方法
线程命名
- 调用父类的setName()方法或在构造方法中给线程名字赋值;
- 如果没有为线程命名,系统默认指定线程名,命名规则是Thread-N的形式。
线程的休眠(暂停)
在线程中,可以通过调用Thread.sleep(毫秒),强迫当前线程按照指定毫秒值休眠。
线程优先级
- setPriority(int n)设置线程优先级,范围是1-10,默认为5.
- 操作系统对高优先级线程,调度更频繁
- 并不代表,通过设置优先级来确保高优先级的线程一定会先执行