Java 什么是多线程
精华
小牛编辑
389浏览
2023-03-14
1 什么是Java多线程
Java 多线程指的是同时执行多个线程的处理。
线程是轻量级子进程,是最小的处理单元。多处理和多线程都用于实现多任务。
但是,我们使用多线程而不是多进程,因为线程使用共享内存区域。它们不分配单独的内存区域,因此节省了内存,并且线程之间的上下文切换比进程花费的时间更少。
线程是轻量级子进程,是最小的处理单元。这是一条单独的执行路径。
线程是独立的。如果一个线程中发生异常,则不会影响其他线程。它使用共享存储区。
如上图所示,线程在进程内部执行。线程之间存在上下文切换。操作系统内部可以有多个进程,并且一个进程可以具有多个线程。
2 Java多线程的优点
- 线程不会阻塞用户,因为线程是独立的,您可以同时执行多个操作。
- 线程可以使您一起执行许多操作,因此可以节省时间。
- 线程是独立的,因此,如果单个线程中发生异常,则不会影响其他线程。
3 进程与线程区别
多任务处理是同时执行多个任务的过程。我们利用CPU执行多任务。可以通过两种方式实现多任务处理:
- 基于进程的多任务处理(多进程)
- 基于线程的多任务处理(多进程)
3.1 基于进行的多任务处理(多进程)
- 每个进程在内存中都有一个地址。换句话说,每个进程分配一个单独的存储区。
- 进程之间的通信成本很高。
- 从一个进程切换到另一个进程需要一些时间来保存和加载寄存器,内存映射,更新列表等。
3.2 基于线程的多任务处理(多线程)
- 线程共享相同的地址空间。
- 线程是轻量级的。
- 线程之间的通信成本很低。
注意:每个线程至少需要一个进程。
4 Java Thread类
Java提供Thread类来实现多线程编程。Thread类提供了构造方法和普通方法来创建线程和执行线程。Thread类继承了Object类并实现了Runnable接口。
5 Java Thread类的方法
修饰符 | 方法 | 描述 |
---|---|---|
void | start() | 用于启动线程的执行。 |
void | run() | 用于对线程执行操作。 |
static void | sleep() | 使线程休眠指定的时间。 |
static Thread | currentThread() | 返回对当前正在执行的线程对象的引用。 |
void | join() | 等待线程死亡。 |
int | getPriority() | 返回线程的优先级。 |
void | setPriority() | 更改线程的优先级。 |
String | getName() | 返回线程的名称。 |
void | setName() | 更改线程的名称。 |
long | getId() | 返回线程的ID。 |
boolean | isAlive() | 判断线程是否还活着。 |
static void | yield() | 使当前正在执行的线程对象暂停,并允许其他线程临时执行。 |
void | suspend() | 用于挂起线程。 |
void | resume() | 用于恢复挂起的线程。 |
void | stop() | 用于停止线程。 |
void | destroy() | 用于销毁线程组及其所有子组。 |
boolean | isDaemon() | 判断线程是否是守护线程。 |
void | setDaemon() | 将线程标记为守护程序或用户线程。 |
void | interrupt() | 中断线程。 |
boolean | isinterrupted() | 判断线程是否已被中断。 |
static boolean | interrupted() | 判断当前线程是否已被中断。 |
static int | activeCount() | 返回当前线程的线程组中活动线程的数量。 |
void | checkAccess() | 确定当前正在运行的线程是否有权修改该线程。 |
static boolean | holdLock() | 当且仅当当前线程在指定对象上持有监视器锁时,它才返回true。 |
static void | dumpStack() | 用于将当前线程的堆栈跟踪信息打印到标准错误流。 |
StackTraceElement[] | getStackTrace() | 返回一个表示线程堆栈转储的堆栈跟踪元素数组。 |
static int | enumerate() | 用于将每个活动线程的线程组及其子组复制到指定的数组中。 |
Thread.State | getState() | 用于返回线程的状态。 |
ThreadGroup | getThreadGroup() | 用于返回该线程所属的线程组。 |
String | toString() | 用于返回此线程的字符串表示形式,包括线程的名称,优先级和线程组。 |
void | notify() | 仅用于通知正在等待特定对象的一个线程。 |
void | notifyAll() | 用于向特定对象的所有等待线程发出通知。 |
void | setContextClassLoader() | 为线程设置上下文ClassLoader。 |
ClassLoader | getContextClassLoader() | 返回线程的上下文ClassLoader。 |
static Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | 返回由于未捕获的异常导致线程突然终止时调用的默认处理程序。 |
static void | setDefaultUncaughtExceptionHandler() | 设置当线程由于未捕获的异常突然终止时调用的默认处理程序。 |