Java Thread 类



介绍

Java Thread 类是程序中的一条执行线程。Java 虚拟机允许应用程序同时运行多条执行线程。以下是关于 Thread 的重要几点:

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

  • 每个线程也可以标记为守护线程或非守护线程。

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

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

类声明

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

public class Thread
   extends Object
      implements Runnable

字段

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

  • static int MAX_PRIORITY - 这是线程可以具有的最大优先级。

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

类构造函数

序号 构造函数及描述
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 作为其运行对象,具有指定的 name 作为其名称,并且属于 group 引用的线程组。

7

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

这将分配一个新的 Thread 对象,使其具有 target 作为其运行对象,具有指定的 name 作为其名称,属于 group 引用的线程组,并且具有指定的堆栈大小。

8

Thread(ThreadGroup group, String name)

这将分配一个新的 Thread 对象。

类方法

序号 方法及描述
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()

此方法返回此线程的标识符。

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 毫秒加上 nanos 纳秒,等待此线程死亡。

26 void run()

如果使用单独的 Runnable run 对象构造此线程,则调用该 Runnable 对象的 run 方法;否则,此方法不执行任何操作并返回。

27 void setContextClassLoader(ClassLoader cl)

此方法设置此线程的上下文 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 虚拟机调用此线程的 run 方法。

36 String toString()

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

37 static void yield()

此方法导致当前执行的线程对象暂时暂停并允许其他线程执行。

继承的方法

此类继承自以下类的方法:

  • java.lang.Object

示例:在多线程程序中获取当前线程

以下示例显示了 Java Thread currentThread() 方法的用法。在此示例中,我们通过实现 Runnable 接口创建了一个线程类 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();
   }
} 

输出

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

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