01
在Java中的多线程
在Java中,多线程是一种同时执行多个线程的过程。
线程是轻量级的子进程,是最小的处理单元。多处理和多线程都用于实现多任务处理。
然而,我们使用多线程而不是多处理,因为线程使用共享内存区域。它们不会分配独立的内存区域,因此节省内存,并且在线程之间进行上下文切换所需的时间比进程少。
Java多线程主要用于游戏、动画等领域。
02Java多线程的优点
1、它不会阻塞用户,因为线程是独立的,可以同时执行多个操作。
2、可以同时执行多个操作,因此节省时间。
3、线程是独立的,因此如果一个线程发生异常,不会影响其他线程。
03多任务处理
多任务处理是同时执行多个任务的过程。我们使用多任务处理来利用CPU。多任务处理可以通过两种方式实现:
-
基于进程的多任务处理(多处理)
-
基于线程的多任务处理(多线程)
1、基于进程的多任务处理(多处理)
- 每个进程在内存中有一个地址。换句话说,每个进程分配一个独立的内存区域。
- 进程是重量级的。
- 进程之间的通信成本较高。
- 切换从一个进程到另一个进程需要一些时间来保存和加载寄存器、内存映射、更新列表等。
2、基于线程的多任务处理(多线程)
- 线程共享相同的地址空间。
- 线程是轻量级的。
- 线程之间的通信成本较低。
注意:每个线程至少需要一个进程。
04什么是线程
线程是一个轻量级的子进程,是最小的处理单元。它是一个独立的执行路径。
线程是独立的。如果一个线程发生异常,不会影响其他线程。它使用共享内存区域。
如上图所示,线程在进程内执行。线程之间进行上下文切换。操作系统内可以有多个进程,一个进程可以有多个线程。
注意:一次只能执行一个线程。
05
Java Thread类
Java提供Thread类来实现线程编程。Thread类提供了构造函数和方法来创建和执行线程操作。Thread类扩展了Object类并实现了Runnable接口。
Java Thread方法
S.N. | Modifier and Type | Method | Description |
1) | void | start() | 它用于启动线程的执行。 |
2) | void | run() | 它用于为线程执行操作。 |
3) | static void | sleep() | 它使线程休眠指定的时间。 |
4) | static Thread | currentThread() | 它返回对当前正在执行的线程对象的引用。 |
5) | void | join() | 它等待线程死亡。 |
6) | int | getPriority() | 它返回线程的优先级。 |
7) | void | setPriority() | 它改变了线程的优先级。 |
8) | String | getName() | 它返回线程的名称。 |
9) | void | setName() | 它更改线程的名称。 |
10) | long | getId() | 它返回线程的 ID。 |
11) | boolean | isAlive() | 它测试线程是否存活。 |
12) | static void | 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) | static int | activeCount() | 它返回当前线程的线程组中的活动线程数。 |
23) | void | checkAccess() | 它判断当前运行的线程是否有修改线程的权限。 |
24) | static boolean | holdLock() | 当且仅当当前线程持有指定对象上的监视器锁时,它才返回 true。 |
25) | static void | dumpStack() | 它用于将当前线程的堆栈跟踪打印到标准错误流。 |
26) | StackTraceElement[] | getStackTrace() | 它返回表示线程堆栈转储的堆栈跟踪元素数组。 |
27) | static int | enumerate() | 它用于将每个活动线程的线程组及其子组复制到指定的数组中。 |
28) | Thread.State | getState() | 它用于返回线程的状态。 |
29) | ThreadGroup | getThreadGroup() | 用于返回该线程所属的线程组 |
30) | String | toString() | 它用于返回此线程的字符串表示形式,包括线程的名称、优先级和线程组。 |
31) | void | notify() | 它用于仅向一个正在等待特定对象的线程发出通知。 |
32) | void | notifyAll() | 它用于向特定对象的所有等待线程发出通知。 |
33) | void | setContextClassLoader() | 它为线程设置上下文类加载器。 |
34) | ClassLoader | getContextClassLoader() | 它为线程设置上下文类加载器。 |
35) | static Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | 它返回当线程由于未捕获的异常而突然终止时调用的默认处理程序。 |
36) | static void | setDefaultUncaughtExceptionHandler() | 它设置当线程由于未捕获的异常而突然终止时调用的默认处理程序。 |
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/3770.html