进程
一个独立的正在执行的程序
线程
一个进程的最基本的执行单位
若将进程类比为社会中独立运行的实体,比如学校、医院、工厂,那么线程则可以理解为在实体中执行各自事务的人,比如老师,学生,医生,工人
多线程
在同一个进程(即应用程序)中同时执行多个线程,提高了CPU的使用率
需要注意
- 一个CPU,在同一个时间点,只能有一个线程在执行
- 多线程不能提高效率,反而会降低效率,但是可以提高CPU的使用率(线程来回切换,CPU则一直工作,没有休息时间)
- 一个进程如果有多条执行路径,则称为多线程程序
- Java虚拟机的启动至少开启了两条线程,主线程和垃圾回收线程
- 线程可以理解为进程的子任务
串行流 & 并行流
在日常开发中,经常会需要使用并行处理的场景来缩短执行时间(对于计算机程序整体性能来说其实并没有提高,线程之间切换也是有成本的,但是对于时间感受来说,执行时间会变短,对于人的感知来说是提高了效率),JDK8的并行流就是一种简单有效的多线程处理模式,示例如下
// 串行流
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list.stream().forEach(i -> {
System.out.println(Thread.currentThread().getId() + " process: " + i);
});
}
// 输出结果
1 process: 1
1 process: 2
1 process: 3
1 process: 4
1 process: 5
1 process: 6
1 process: 7
1 process: 8
1 process: 9
1 process: 10
// 并行流
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list.parallelStream().forEach(i -> {
System.out.println(Thread.currentThread().getId() + " process: " + i);
});
}
// 输出结果
20 process: 10
15 process: 9
17 process: 2
20 process: 1
18 process: 5
15 process: 4
19 process: 8
16 process: 6
1 process: 7
14 process: 3
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。