当前位置: 首页 > 教程 > Java多线程 >

Java 什么是多线程

精华
小牛编辑
389浏览
2023-03-14

1 什么是Java多线程

Java 多线程指的是同时执行多个线程的处理。

线程是轻量级子进程,是最小的处理单元。多处理和多线程都用于实现多任务。

但是,我们使用多线程而不是多进程,因为线程使用共享内存区域。它们不分配单独的内存区域,因此节省了内存,并且线程之间的上下文切换比进程花费的时间更少。

线程是轻量级子进程,是最小的处理单元。这是一条单独的执行路径。

线程是独立的。如果一个线程中发生异常,则不会影响其他线程。它使用共享存储区。

如上图所示,线程在进程内部执行。线程之间存在上下文切换。操作系统内部可以有多个进程,并且一个进程可以具有多个线程。

2 Java多线程的优点

  1. 线程不会阻塞用户,因为线程是独立的,您可以同时执行多个操作。
  2. 线程可以使您一起执行许多操作,因此可以节省时间。
  3. 线程是独立的,因此,如果单个线程中发生异常,则不会影响其他线程。

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()         设置当线程由于未捕获的异常突然终止时调用的默认处理程序。