进程和线程常用方法
进程
定义
- 进程 是操作系统分配资源的基本单位,是程序的一次执行过程
- 每个进程都有独立的内存空间、文件描述符、环境变量等资源
- 进程之间相互隔离,一个进程崩溃不会影响其他进程
特点
- 独立性:每个进程有独立的内存空间和资源
- 隔离性:进程之间通过进程间通信(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 同时执行多个线程或进程
- 分布式系统:通过多台计算机同时执行任务

浙公网安备 33010602011771号