基本概念 (以下任务可以理解为 java 的方法)
1.1:程序、进程、线程
程序:用某种语言编写的一组指令的集合,一段静态代码
进程:使程序的静态代码运行起来,比如正在运行的微信,就是一个进程,进程是资源分配的单位
系统在运行时会为每个进程分配不同的内存区域
线程:一个进程,执行某个方法时,就是一个线程,但一个进程可以同时执行多个方法,就是多线程,比如人可以同时听说读写
线程是调度和执行单位,每一个线程拥有独立的运行栈和程序和计数器,多个线程之间可以共享相同的内存地址(堆),
所以多个线程之间可以通信,但是因为多个线程之间可以共享内存地址(堆),所以有可能会带来线程安全的隐患,
所以需要线程同步来解决
注:一个进程开的线程越多,所占用的系统内存就越多,所以在程序部署时需要考虑服务器的配置问题
1.2:并行和并发
并行:同时执行多个不同任务,
比如,多个人同时做不同的事(两个人同时调两个不同的java方法)
并发:同时执行多个相同任务,
比如。秒杀,多个人同时做同一件事,所以要注意线程安全的问题
(两个人同时调一个相同的java方法,操作了同一个数据)
1.3:使用多线程的优点
提高应用程序的相应,对图形化界面更有意义,可增强用户体验
提高计算机系统cpu的利用率
改善程序结构,将即长又复杂的进程分为多个线程,独立运行,利于理解和修改
1.4:何时需要多线程
程序需要同时执行两个或多个任务
程序需要实现一些需要等待的任务时,比如用户输入、文件读写
需要一些后台运行的程序时
注:多个线程在执行时,由 cpu 进行执行权的分配,不需要等待某个线程执行完毕,可以在某个线程执行的过程中,
将执行权分配到另一个线程上,当执行权再一次分配到这个线程时,继续执行剩下的线程代码