14Java多线程之介绍
推荐链接:
程序
链接: 计算机程序
一个普通文件,一个机器代码指令和数据的集合
进程
链接: 进程 、 多进程
进程是资源分配的最小单位,线程是CPU调度的最小单位。
就是正在运行的程序。
通过任务管理器我们就看到了进程的存在。
每一个进程都有它自己的内存空间和系统资源。
多进程意义
进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情。
举例:一边玩游戏(游戏进程),一边听音乐(音乐进程)。
现在的计算机都是支持多进程的,可以在一个时间段内执行多个任务。
可以提高CPU的使用率。
问题:
游戏,一边听音乐是同时进行的吗?
不是。因为单CPU在某一个时间点上只能做一件事情。而我们在玩游戏,或者听音乐的时候,是CPU在做着程序间的高效切换让我们觉得是同时进行的。
程序和进程的区别
进程是动态的,程序是静态的:程序是有序代码的集合,进程是程序的执行。进程有核心态/用户态。
进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可以长久保存
进程和程序的组成不同,进程的组成包括程序、数据和进程控制块(即进程状态信息)
线程:依赖于进程而存在
链接: 线程 、 多线程 、 https://www.cnblogs.com/-new/p/7234332.html
进程是资源分配的最小单位,线程是CPU调度的最小单位。
在同一个进程内又可以执行多个任务,而这每一个任务我就可以看出是一个线程。
线程:是进程中的单个顺序控制流,是一条执行路径。
单线程:一个进程只有一条执行路径。
多线程:一个进程有多条执行路径。
多线程意义
多线程的存在,不是提高程序的执行速度。其实是为了提高应用程序的使用率。
程序的执行其实都是在抢CPU的资源,CPU的执行权。
多个进程是在抢这个资源,而其中的某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权。
我们是不敢保证哪一个线程能够在哪个时刻抢到,所以线程的执行有随机性。
Java程序的运行原理及JVM的启动是多线程的吗?
A:Java命令会启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线程”, 然后主线程去调用某个类的 main 方法。所以 main方法运行在主线程中。在此之前的所有程序都是单线程的。
B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
并发、并行、同步、异步、多线程的区别
并发和并行最开始都是操作系统中的概念,表示的是CPU执行多个任务的方式。这两个概念极容易混淆。
并发(Concurrent)是逻辑上同时发生,指在同一时间段内同时发生,在同一个CPU的同一个核心上交替运行。单核单CPU同时处理多个任务,多个任务之间互相抢占资源。
并行(Parallel)是物理上同时发生,指在同一时刻同时发生。当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。多CPU(或多核单CPU)同时处理多个不同的任务,多个任务之间不互相抢占资源。
只有在多CPU(或多核单CPU)的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的。
异步和多线程:不是同等关系,异步是目的,多线程只是实现异步的一种手段。实现异步可以采用多线程技术或者交给其他进程处理。