程序(program):为了完成特定任务的一堆静态代码
进程(process):程序的一次执行过程或者说是正在运行的动态的程序。进程作为资源分配的基本单位,系统在运行时为每个进程分配不同的内存区域。
线程(thread):进程进一步细化成线程,是cpu调度和执行的基本单位。每个线程拥有独立的栈和程序计数器(pc),共享方法区和堆(也就是方法区和堆是每个进程一个),也通过共享区域进行进程间的通信。
多核和单核:单核是假的多线程(一个cpu采用时间片等方式不停地切换线程),多核是真的多线程
并行和并发:并行就是多个cpu同时做多个事情。并发是一个cpu同时做多个事情
使用多线程的优点:(其实使用多线程不一定比单线程快,因为调度也要时间)
1.提供程序响应(用户体验)
2.改善cpu利用率(都是无缝对接)
3.改善程序结构(每个线程独立运行)
何时需要多线程:
1.程序需要同时执行两个或多个任务(例如,每个java程序其实至少是三个线程,main一个,gc垃圾回收一个,异常处理一个。而且必须同步进行)
2.程序遇到一些需要等待的任务,例如用户输入、文件读写、网络操作和搜索等
3.需要一些后台运行的程序时(同样是gc垃圾回收和异常处理这个例子)