进程

定义

进程 是操作系统分配资源的基本单位,是程序的一次执行过程

每个进程都有独立的内存空间、文件描述符、环境变量等资源

进程之间相互隔离,一个进程崩溃不会影响其他进程

特点

独立性:每个进程有独立的内存空间和资源

隔离性:进程之间通过进程间通信(IPC)机制进行交互

资源开销大:创建和销毁进程的开销较大,因为需要分配和回收独立的内存空间和资源

线程

定义

线程 是进程中的一个执行单元,是 CPU 调度的基本单位

一个进程可以包含多个线程,这些线程共享进程的内存空间和资源

线程之间可以直接访问共享数据,但也需要同步机制来避免竞争条件

特点

共享资源:线程共享进程的内存空间和资源

轻量级:创建和销毁线程的开销较小

并发性:线程可以并发执行,提高程序的执行效率

线程常用方法

Thread.currentThread():获取当前线程对象

Object.getName() 和 setName(String name),获取或设置线程的名称

Thread thread = new Thread(() -> {

System.out.println("Thread name: " + Thread.currentThread().getName());

});

thread.setName("MyThread");

thread.start();

Object.getPriority() 和 setPriority(int priority)

优先级范围:1(最低)到 10(最高),默认优先级为 5

特点:优先级高的线程有更大的机会获得 CPU 时间片

Thread thread = new Thread(() -> {

System.out.println("Thread priority: " + Thread.currentThread().getPriority());

});

thread.setPriority(Thread.MAX_PRIORITY); // 设置最高优先级

thread.start();

Thread.sleep(long millis),让当前线程暂停执行指定的时间(毫秒)

不会释放锁

可能会被中断,抛出 InterruptedException

try {

Thread.sleep(1000); // 暂停 1 秒

} catch (InterruptedException e) {

e.printStackTrace();

}

Object.join(),让当前线程等待目标线程终止

可以设置超时时间(如 join(long millis))

可能会被中断,抛出 InterruptedException

Thread thread = new Thread(() -> {

System.out.println("Thread is running.");

});

thread.start();

thread.join(); // 当前线程等待,等待插入的线程终止

System.out.println("Thread is done.");

Object.interrupt(),中断目标线程

如果线程处于 wait()、sleep() 或 join() 状态,会抛出 InterruptedException

可以通过 isInterrupted() 检查线程的中断状态

对于正在运行中的线程,interrupt() 仅设置中断标志位,不会直接停止线程。需要线程主动检查中断状态(如通过 isInterrupted() 或 Thread.interrupted() )并终止任务

线程处于阻塞状态(如 sleep()、wait()、join()),调用 interrupt() 会触发 InterruptedException 异常,线程可以通过捕获该异常退出阻塞状态

Thread thread = new Thread(() -> {

while (!Thread.currentThread().isInterrupted()) {

System.out.println("Thread is running.");

}

System.out.println("Thread is interrupted.");

});

thread.start();

Thread.sleep(1000);

thread.interrupt(); // 中断线程

守护线程

守护线程(Daemon Thread)是 Java 中一种特殊类型的线程,主要作用是为其他线程(用户线程)提供后台支持服务

当所有用户线程结束时,无论守护线程是否执行完成,JVM 都会自动终止守护线程并退出

默认优先级较低

不会阻止 JVM 退出,常用于执行非关键任务(如垃圾回收、日志记录等)

用Object.setDaemon(true)设置线程为守护线程,必须在调用 start() 方法前设置

Thread daemonThread = new Thread(() -> {

while (true) {

System.out.println(" 守护线程运行中...");

try { Thread.sleep(1000); }

catch (InterruptedException e) { e.printStackTrace(); }

}

});

daemonThread.setDaemon(true); // 必须在 start() 前调用

daemonThread.start();

并发

定义

并发 是指多个任务在同一时间段内交替执行,从宏观上看似乎是同时进行的,但实际上是通过快速切换任务来实现的

并发通常用于提高系统的响应性和资源利用率

单核 CPU 上的多任务处理:通过操作系统的任务调度,快速切换多个任务,实现并发执行

特点

任务交替执行:多个任务在同一时间段内交替执行,但某一时刻只有一个任务在运行

适用于 I/O 密集型任务:并发适合处理需要等待 I/O 操作(如文件读写、网络请求)的任务

实现方式

多线程:通过创建多个线程来实现并发

事件驱动:通过事件循环和回调函数来实现并发

并行

定义

并行 是指多个任务在同一时刻同时执行,通常需要多核 CPU 或分布式系统的支持

并行通常用于提高系统的计算性能

特点

任务同时执行:多个任务在同一时刻同时执行

提高计算性能:通过同时执行多个任务,可以显著提高计算速度

适用于 CPU 密集型任务:并行适合处理需要大量计算的任务

实现方式

多核 CPU:通过多核 CPU 同时执行多个线程或进程

分布式系统:通过多台计算机同时执行任务