过程
一个独立的正在执行的程序
线程
一个过程的最根本的执行单位
若将过程类比为社会中独立运行的实体,比方学校、医院、工厂,那么线程则能够了解为在实体中执行各自事务的人,比方老师,学生,医生,工人
多线程
在同一个过程 (即应用程序) 中同时执行多个线程,进步了 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