在Java中的多线程

在Java中,多线程是一种同时执行多个线程的过程。

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

然而,我们使用多线程而不是多处理,因为线程使用共享内存区域。它们不会分配独立的内存区域,因此节省内存,并且在线程之间进行上下文切换所需的时间比进程少。

Java多线程主要用于游戏、动画等领域。

Java多线程的优点

1)它不会阻塞用户,因为线程是独立的,可以同时执行多个操作。

2)可以同时执行多个操作,因此节省时间。

3)线程是独立的,因此如果一个线程发生异常,不会影响其他线程。

多任务处理

多任务处理是同时执行多个任务的过程。我们使用多任务处理来利用CPU。多任务处理可以通过两种方式实现:

  • 基于进程的多任务处理(多处理)
  • 基于线程的多任务处理(多线程)

1)基于进程的多任务处理(多处理)

  • 每个进程在内存中有一个地址。换句话说,每个进程分配一个独立的内存区域。
  • 进程是重量级的。
  • 进程之间的通信成本较高。
  • 切换从一个进程到另一个进程需要一些时间来保存和加载寄存器、内存映射、更新列表等。

2)基于线程的多任务处理(多线程)

  • 线程共享相同的地址空间。
  • 线程是轻量级的。
  • 线程之间的通信成本较低。

注意:每个线程至少需要一个进程。

什么是线程

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

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

1.png

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

注意:一次只能执行一个线程。

Java Thread类

Java提供Thread类来实现线程编程。Thread类提供了构造函数和方法来创建和执行线程操作。Thread类扩展了Object类并实现了Runnable接口。

Java Thread方法

S.N.Modifier and TypeMethodDescription
1)voidstart()它用于启动线程的执行。
2)voidrun()它用于为线程执行操作。
3)static voidsleep()它使线程休眠指定的时间。
4)static ThreadcurrentThread()它返回对当前正在执行的线程对象的引用。
5)voidjoin()它等待线程死亡。
6)intgetPriority()它返回线程的优先级。
7)voidsetPriority()它改变了线程的优先级。
8)StringgetName()它返回线程的名称。
9)voidsetName()它更改线程的名称。
10)longgetId()它返回线程的 ID。
11)booleanisAlive()它测试线程是否存活。
12)static voidyield()它会导致当前正在执行的线程对象暂停并允许其他线程暂时执行。
13)voidsuspend()它用于挂起线程。
14)voidresume()它用于恢复挂起的线程。
15)voidstop()它用于停止线程。
16)voiddestroy()它用于销毁线程组及其所有子组。
17)booleanisDaemon()它测试线程是否是守护线程。
18)voidsetDaemon()它将线程标记为守护进程或用户线程。
19)voidinterrupt()它中断线程。
20)booleanisinterrupted()它测试线程是否已被中断。
21)static booleaninterrupted()它测试当前线程是否已被中断。
22)static intactiveCount()它返回当前线程的线程组中的活动线程数。
23)voidcheckAccess()它判断当前运行的线程是否有修改线程的权限。
24)static booleanholdLock()当且仅当当前线程持有指定对象上的监视器锁时,它才返回 true。
25)static voiddumpStack()它用于将当前线程的堆栈跟踪打印到标准错误流。
26)StackTraceElement[]getStackTrace()它返回表示线程堆栈转储的堆栈跟踪元素数组。
27)static intenumerate()它用于将每个活动线程的线程组及其子组复制到指定的数组中。
28)Thread.StategetState()它用于返回线程的状态。
29)ThreadGroupgetThreadGroup()用于返回该线程所属的线程组
30)StringtoString()它用于返回此线程的字符串表示形式,包括线程的名称、优先级和线程组。
31)voidnotify()它用于仅向一个正在等待特定对象的线程发出通知。
32)voidnotifyAll()它用于向特定对象的所有等待线程发出通知。
33)voidsetContextClassLoader()它为线程设置上下文类加载器。
34)ClassLoadergetContextClassLoader()它为线程设置上下文类加载器。
35)static Thread.UncaughtExceptionHandlergetDefaultUncaughtExceptionHandler()它返回当线程由于未捕获的异常而突然终止时调用的默认处理程序。
36)static voidsetDefaultUncaughtExceptionHandler()它设置当线程由于未捕获的异常而突然终止时调用的默认处理程序。

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想