📜  Java多线程

📅  最后修改于: 2020-09-26 13:23:40             🧑  作者: Mango

Java多线程

Java中的多线程是同时执行多个线程的过程。

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

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

Java多线程技术主要用于游戏,动画等。

Java多线程的优点

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

2)您可以一起执行许多操作,因此可以节省时间。

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

多任务

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

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

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

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

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

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

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

什么是Java中的线程

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

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

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

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

Java线程类

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

Java线程方法

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() 它导致当前执行的thread对象暂停,并允许其他线程临时执行
13) void suspend() 它用于挂起线程
14) void resume() 它用于恢复挂起的线程
15) void stop() 它用于停止线程
16) void destroy() 它用于销毁线程组及其所有子组
17) boolean isDaemon() 它测试该线程是否是守护线程
18) void setDaemon() It marks the thread as daemon or user thread.
19) void interrupt() It interrupts the thread.
20) boolean isinterrupted() It tests whether the thread has been interrupted.
21) static boolean interrupted() It tests whether the current thread has been interrupted.
22) static int activeCount() It returns the number of active threads in the current thread’s thread group.
23) void checkAccess() It determines if the currently running thread has permission to modify the thread.
24) static boolean holdLock() It returns true if and only if the current thread holds the monitor lock on the specified object.
25) static void dumpStack() It is used to print a stack trace of the current thread to the standard error stream.
26) StackTraceElement[] getStackTrace() It returns an array of stack trace elements representing the stack dump of the thread.
27) static int enumerate() It is used to copy every active thread’s thread group and its subgroup into the specified array.
28) Thread.State getState() It is used to return the state of the thread.
29) ThreadGroup getThreadGroup() It is used to return the thread group to which this thread belongs
30) String toString() It is used to return a string representation of this thread, including the thread’s name, priority, and thread group.
31) void notify() It is used to give the notification for only one thread which is waiting for a particular object.
32) void notifyAll() It is used to give the notification to all waiting threads of a particular object.
33) void setContextClassLoader() It sets the context ClassLoader for the Thread.
34) ClassLoader getContextClassLoader() It returns the context ClassLoader for the thread.
35) static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() It returns the default handler invoked when a thread abruptly terminates due to an uncaught exception.
36) static void setDefaultUncaughtExceptionHandler() It sets the default handler invoked when a thread abruptly terminates due to an uncaught exception.