java中的多线程是一个同时执行多个线程的进程。线程是一个轻量级的子进程,是最小的处理单元。多进程和多线程都用于实现多任务处理。
但是,一般使用多线程而不是多进程,这是因为线程使用共享内存区域。它们不分配单独的内存区域以节省内存,并且线程之间的上下文切换比进程花费的时间更少。
Java多线程主要用于游戏,动画等。
1. Java多线程的优点
(1)它不会阻塞用户,因为线程是独立的,可以同时执行多个操作。
(2)可以一起执行许多操作,因此可以节省时间。
(3)线程是独立的,因此如果在单个线程中发生异常,它不会影响其他线程。
2. 多任务处理
多任务处理是同时执行多个任务的过程。使用多任务来利用CPU,多任务处理可以通过两种方式实现:
基于进程的多任务处理(多进程)
基于线程的多任务处理(多线程)
2.1. 基于进程的多任务处理(多进程)
- 每个进程在内存中都有一个地址。 换句话说,每个进程分配一个单独的内存区域。
- 进程是重量级的。
- 进程之间的通信成本很高。
- 从一个进程切换到另一个进程需要一些时间来保存和加载寄存器,内存映射,更新列表等。
2.2. 基于线程的多任务处理(多线程)
- 线程共享相同的地址空间。
- 线程是轻量级的。
- 线程之间的通信成本很低。
注意:一次只执行一个线程。
Java Thread类
Java提供了Thread
类来实现线程编程。 Thread
类提供了在线程上创建和执行操作的构造函数和方法。 Thread
类扩展了Object
类并实现了Runnable
接口。
Java线程方法
编号 | 修辞符 | 方法 | 描述 |
---|---|---|---|
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() | 它为Thread 设置上下文ClassLoader 。 |
34 | ClassLoader |
getContextClassLoader() | 它返回线程的上下文ClassLoader 。 |
35 | static Thread.UncaughtExceptionHandler |
getDefaultUncaughtExceptionHandler() | 它返回由于未捕获的异常而导致线程突然终止时调用的默认处理程序。 |
36 | static void |
setDefaultUncaughtExceptionHandler() | 它设置当线程由于未捕获的异常而突然终止时调用的默认处理程序。 |
java中的线程是什么
线程是一个轻量级的子进程,是最小的处理单元。它是一个单独的执行路径。
线程是独立的。 如果在一个线程中发生异常,则不会影响其他线程。 它使用共享内存区域。
如上图所示,线程在进程内执行。线程之间存在上下文切换。 操作系统中可以有多个进程,一个进程可以有多个线程。
开始学习 >> :线程的生命周期(线程状态)