本文概述
- 多任务
- 什么是Java中的线程
- Java线程类
- Java线程方法
线程是轻量级子进程, 是最小的处理单元。多处理和多线程都用于实现多任务。
但是, 我们使用多线程而不是多处理, 因为线程使用共享内存区域。它们不分配单独的内存区域, 因此节省了内存, 并且线程之间的上下文切换比进程花费的时间更少。
Java Multithreading主要用于游戏, 动画等。
Java多线程的优点
1)它不会阻塞用户, 因为线程是独立的, 你可以同时执行多个操作。
【Java多线程介绍】2)你可以一起执行许多操作, 这样可以节省时间。
3)线程是独立的, 因此, 如果单个线程中发生异常, 则不会影响其他线程。
多任务 多任务处理是同时执行多个任务的过程。我们使用多任务来利用CPU。可以通过两种方式实现多任务处理:
- 基于流程的多任务处理(多处理)
- 基于线程的多任务处理(多线程)
- 每个进程在内存中都有一个地址。换句话说, 每个进程分配一个单独的存储区。
- 一个过程很重要。
- 进程之间的通信成本很高。
- 从一个进程切换到另一个进程需要一些时间来保存和加载寄存器, 内存映射, 更新列表等。
- 线程共享相同的地址空间。
- 线程是轻量级的。
- 线程之间的通信成本很低。
线程是独立的。如果一个线程中发生异常, 则不会影响其他线程。它使用共享存储区。
文章图片
如上图所示, 线程在进程内部执行。线程之间存在上下文切换。操作系统内部可以有多个进程, 并且一个进程可以具有多个线程。
注意:一次只执行一个线程。 Java线程类 Java提供Thread类来实现线程编程。 Thread类提供了构造函数和方法来在线程上创建和执行操作。线程类扩展了Object类并实现了Runnable接口。
Java线程方法
序号 | 修饰符和类型 | 方法 | 描述 |
---|---|---|---|
1) | void | start() | 它用于启动线程的执行。 |
2) | void | run() | 它用于对线程执行操作。 |
3) | 静态空隙 | sleep() | 它使线程休眠指定的时间。 |
4) | 静态线程 | currentThread() | 它返回对当前正在执行的线程对象的引用。 |
5) | void | join() | 它等待线程死亡。 |
6) | int | getPriority() | 它返回线程的优先级。 |
7) | void | setPriority() | 它更改线程的优先级。 |
8) | String | getName() | 它返回线程的名称。 |
9) | void | setName() | 它更改线程的名称。 |
10) | long | getId() | 它返回线程的ID。 |
11) | boolean | isAlive() | 它测试线程是否还活着。 |
12) | 静态空隙 | yield() | 它使当前正在执行的线程对象暂停, 并允许其他线程临时执行。 |
13) | void | suspend() | 它用于挂起线程。 |
14) | void | resume() | 用于恢复挂起的线程。 |
15) | void | stop() | 用于停止线程。 |
16) | void | destroy() | 它用于销毁线程组及其所有子组。 |
17) | boolean | isDaemon() | 它测试线程是否是守护线程。 |
18) | void | setDaemon() | 它将线程标记为守护程序或用户线程。 |
19) | void | interrupt() | 它中断线程。 |
20) | boolean | isinterrupted() | 它测试线程是否已被中断。 |
21) | static boolean | interrupted() | 它测试当前线程是否已被中断。 |
22) | 静态整数 | activeCount() | 它返回当前线程的线程组中活动线程的数量。 |
23) | void | checkAccess() | 它确定当前正在运行的线程是否有权修改该线程。 |
24) | 静态布尔 | holdLock() | 当且仅当当前线程在指定对象上持有监视器锁时, 它才返回true。 |
25) | 静态空隙 | dumpStack() | 它用于将当前线程的堆栈跟踪信息打印到标准错误流。 |
26) | StackTraceElement[] | getStackTrace() | 它返回一个表示线程堆栈转储的堆栈跟踪元素数组。 |
27) | 静态整数 | enumerate() | 它用于将每个活动线程的线程组及其子组复制到指定的数组中。 |
28) | 线程状态 | getState() | 它用于返回线程的状态。 |
29) | ThreadGroup | getThreadGroup() | 用于返回该线程所属的线程组 |
30) | String | toString() | 它用于返回此线程的字符串表示形式, 包括线程的名称, 优先级和线程组。 |
31) | void | notify() | 它仅用于通知正在等待特定对象的一个??线程。 |
32) | void | notifyAll() | 它用于向特定对象的所有等待线程发出通知。 |
33) | void | setContextClassLoader() | 它为线程设置上下文ClassLoader。 |
34) | ClassLoader | getContextClassLoader() | 它返回线程的上下文ClassLoader。 |
35) | 静态Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | 当线程由于未捕获的异常突然终止时, 它将返回调用的默认处理程序。 |
36) | static void | setDefaultUncaughtExceptionHandler() | 它设置当线程由于未捕获的异常突然终止时调用的默认处理程序。 |
我们将在多线程中学到什么
推荐阅读
- Java线程的生命周期(线程状态)
- Java线程池介绍和实例
- 线程join()方法
- Java Runtime类
- Java中的线程间通信
- Java中断线程
- Java垃圾回收
- Java线程死锁
- Java中的守护程序线程