JAVA并发编程
1. 介绍
1.1 进程与线程
1.1.1 概念
进程:计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位(比如内存、文件句柄、安全证书)。程序在各自的进程上运行,可以简单理解为运行的程序。
线程:是进程的一个执行单元,以单一顺序的控制流作为进程的执行分支。共享进程范围内的资源(比如内存、文件句柄),但都有自己的程序计数器、栈和本地变量。
1.1.2 线程的优点
- 降低开发和维护的开销
- 在GUI程序中改进用户接口的响应性
- 在服务器应用中提高资源的利用率和吞吐量
1.1.3 线程的风险
- 安全危险:线程交替占有运行时,导致意外结果。
- 活跃度的危险:多线程带来活跃度失败,如死锁、饥饿、活锁。
- 性能危险:上下文切换(挂起当前线程,运行另一个线程)的频繁进行导致巨大的系统开销;同步机制限制编译器的优化。
1.1.4 线程引入的开销
- 上下文切换
- 内存同步
- 阻塞
1.1.5 Java中的线程
JVM启动时会创建一个主线程,该主线程负责执行main方法;以及一些进行自身的常规管理线程(如垃圾回收、终结处理)。
1.2 并行与并发
- 并行(parallel):同时处理多个任务
- 并发(concurrent):有处理多个任务的能力,但不一定是同时。
1.3 Java线程操作
1.3.1 创建与启动
-
创建一个线程就是创建Thread类对象,可以直接定义Thread类子类或定义Runnable接口的实现类,并重写run方法,即线程要执行的任务。
// 方法一 public class MyThread