乐趣区

关于java:进程-线程-多线程-串行流-并行流

过程

一个独立的正在执行的程序

线程

一个过程的最根本的执行单位
若将过程类比为社会中独立运行的实体,比方学校、医院、工厂,那么线程则能够了解为在实体中执行各自事务的人,比方老师,学生,医生,工人

多线程

在同一个过程 (即应用程序) 中同时执行多个线程,进步了 CPU 的使用率
须要留神

  1. 一个 CPU,在同一个工夫点,只能有一个线程在执行
  2. 多线程不能提高效率,反而会升高效率,然而能够进步 CPU 的使用率(线程来回切换,CPU 则始终工作,没有休息时间)
  3. 一个过程如果有多条执行门路,则称为多线程程序
  4. Java 虚拟机的启动至多开启了两条线程,主线程和垃圾回收线程
  5. 线程能够了解为过程的子工作

串行流 & 并行流

在日常开发中,常常会须要应用并行处理的场景来缩短执行工夫(对于计算机程序整体性能来说其实并没有进步,线程之间切换也是有老本的,然而对于工夫感触来说,执行工夫会变短,对于人的感知来说是进步了效率),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

退出移动版