Java 简明教程

Java Thread Class

Introduction

Java Thread 类是程序中的执行线程。Java 虚拟机允许一个应用程序并行运行多个执行线程。以下是关于线程的重要要点 -

  1. 每个线程都有一个优先级。优先级较高的线程优先于优先级较低的线程执行。

  2. 每个线程也可以标记为守护线程,或不标记为守护线程。

  3. 有两种创建新的执行线程的方法。一种是声明一个类为 Thread 的子类,

  4. 另一种创建线程的方法是声明一个实现 Runnable 接口的类。

Class Declaration

以下是 java.lang.Thread 类的声明 -

public class Thread
   extends Object
      implements Runnable

Field

以下是 java.lang.Thread 类的字段 -

  1. static int MAX_PRIORITY - 这是线程可以拥有的最大优先级。

  2. static int NORM_PRIORITY - 这是分配给线程的默认优先级。

Class constructors

Sr.No.

Constructor & Description

1

Thread() 这会分配一个新的 Thread 对象。

2

Thread(Runnable target) 这会分配一个新的 Thread 对象。

3

Thread(Runnable target, String name) 这会分配一个新的 Thread 对象。

4

Thread(String name) 这会构造并分配一个新的 Thread 对象。

5

Thread(ThreadGroup group, Runnable target) 这会分配一个新的 Thread 对象。

6

Thread(ThreadGroup group, Runnable target, String name) 这会分配一个新的 Thread 对象,使其将 target 作为其 run 对象,将指定名称作为其名称,并属于由 group 引用的线程组。

7

Thread(ThreadGroup group, Runnable target, String name, long stackSize) 这会分配一个新的 Thread 对象,使其将 target 作为其 run 对象,将指定名称作为其名称,属于由 group 引用的线程组,并具有指定堆栈大小。

8

Thread(ThreadGroup group, String name) 这会分配一个新的 Thread 对象。

Class methods

Sr.No.

Method & Description

1

static int activeCount() 此方法返回当前线程的线程组中的活动线程数。

2

void checkAccess() 此方法判断当前运行的线程是否具有修改此线程的权限。

3

protected Object clone() 如果此对象的类是 Cloneable,此方法会返回一个克隆。

4

static Thread currentThread() 此方法返回对当前执行线程对象的引用。

5

static void dumpStack() 此方法将当前线程的堆栈轨迹打印至标准错误流。

6

static int enumerate(Thread[] tarray) 此方法将当前线程的线程组及其子组中的每个活动线程复制到指定数组中。

7

static Map<Thread,StackTraceElement[]> getAllStackTraces() 此方法返回所有活动线程的堆栈轨迹映射。

8

ClassLoader getContextClassLoader() 此方法返回此线程的上下文 ClassLoader。

9

static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() 此方法返回当线程因未捕获的异常导致突然终止时调用的默认处理程序。

10

long getId() 此方法返回此 Thread 的标识符。

11

String getName() 此方法返回此线程的名称。

12

int getPriority() 此方法返回此线程的优先级。

13

StackTraceElement[] getStackTrace() 此方法返回代表此线程的堆栈转储的堆栈跟踪元素数组。

14

Thread.State getState() 此方法返回此线程的状态。

15

ThreadGroup getThreadGroup() 此方法返回此线程所属的线程组。

16

Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() 此方法返回当此线程因未捕获的异常导致突然终止时调用的处理程序。

17

static boolean holdsLock(Object obj) 当且仅当前线程对指定对象持有监视器锁时,此方法返回 true。

18

void interrupt() 此方法中断此线程。

19

static boolean interrupted() 此方法测试当前线程是否已中断。

20

boolean isAlive() 此方法测试此线程是否处于活动状态。

21

boolean isDaemon() 此方法测试此线程是否为后台线程。

22

boolean isInterrupted() 此方法测试此线程是否已中断。

23

void join() 等待此线程终止。

24

void join(long millis) 最多等待 millis 毫秒至该线程终止。

25

void join(long millis, int nanos) 最多等待 millis 毫秒 plus nanos 纳秒至该线程终止。

26

void run() 如果此线程是使用单独的 Runnable 运行对象构建的,则会调用该 Runnable 对象的 run 方法;否则,此方法什么也不做并返回

27

void setContextClassLoader(ClassLoader cl) 此方法为该 Thread 设置上下文 ClassLoader。

28

void setDaemon(boolean on) 该方法将此线程标记为守护程序线程或用户线程。

29

static void setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler eh) 此方法设置了当线程因未捕获的异常而突然终止时调用的默认处理程序,并且尚未为该线程定义其他处理程序。

30

void setName(String name) 此方法将此线程的名称更改为等于参数名称。

31

void setPriority(int newPriority) 此方法将更改此线程的优先级。

32

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 此方法设置了当此线程因未捕获的异常而突然终止时调用的处理程序。

33

static void sleep(long millis) 此方法使当前执行的线程休眠(暂时停止执行)指定毫秒数,具体取决于系统计时器和调度程序的精度和准确度。

34

static void sleep(long millis, int nanos) 此方法使当前执行的线程休眠(停止执行)指定毫秒数加上指定纳秒数,具体取决于系统计时器和调度程序的精度和准确度。

35

void start() 此方法使此线程开始执行;Java 虚拟机调用此线程的运行方法。

36

String toString() 此方法返回此线程的字符串表示形式,包括线程的名称、优先级和线程组。

37

static void yield() 此方法使当前执行的线程对象暂时暂停并允许其他线程执行。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.Object

Example: Getting Current Thread in Multi-threaded program

以下示例展示了 Java Thread currentThread() 方法的用法。在此示例中,我们通过实施 Runnable Interface 创建了一个线程类 ThreadDemo。在 ThreadDemo 构造函数中,使用 currentThread 方法检索当前活动线程,创建一个新线程并打印两者。

package com.tutorialspoint;

public class ThreadDemo implements Runnable {

   ThreadDemo() {
      // main thread
      Thread currThread = Thread.currentThread();

      // thread created
      Thread t = new Thread(this, "Admin Thread");

      System.out.println("current thread = " + currThread);
      System.out.println("thread created = " + t);

      // this will call run() function
      t.start();
   }

   public void run() {
      System.out.println("This is run() method");
   }

   public static void main(String args[]) {
      new ThreadDemo();
   }
}

Output

让我们编译并运行上述程序,这将生成以下结果 −

current thread = Thread[main,5,main]
thread created = Thread[Admin Thread,5,main]
This is run() method