并发基础篇(二):Thread类的API总结

Thread 类是java中的线程类,提供给用户用于创建、操作线程、获取线程的信息的类。是java线程一切的基础,掌握这个类是非常必须的,先来看一下它的API.

1、字段摘要

static int MAX_PRIORITY

线程可以具有的最高优先级

static int MIN_PRIORITY

线程可以具有的最低优先级

static int NORM_PRIORITY

分配给线程的默认优先级

2、构造方法摘要

Thread() :

分配新的 Thread 对象。

Thread(Runnable target)

分配新的 Thread 对象。

Thread(Runnable target, String name)

分配新的 Thread 对象。

Thread(String name)

分配新的 Thread 对象。参数是线程名称

Thread(ThreadGroup group, Runnable target)

分配新的 Thread 对象。

Thread(ThreadGroup group, Runnable target, String name)

分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。

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

分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。

Thread(ThreadGroup group, String name)

分配新的 Thread 对象。

注意:   线程组(ThreadGroup )已经算是过时的,被抛弃的了,所以不需要去研究线程组,仅仅知道有这个存在就可以了。按照《java编程思想》的说法,线程组一次不成功的尝试

3、方法摘要

3.1、静态方法

static Thread currentThread()

返回对当前正在执行的线程对象的引用。

static int activeCount()

返回当前线程的线程组中活动线程的数目。

static boolean interrupted()

测试当前线程是否已经中断。

static void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

static void sleep(long millis, int nanos)

在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

static void yield()

暂停当前正在执行的线程对象,并执行其他线程。

static boolean holdsLock(Object obj)

当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。

static void dumpStack()

将当前线程的堆栈跟踪打印至标准错误流。

static int enumerate(Thread[] tarray)

将当前线程的线程组及其子组中的每一个活动线程复制到指定的数组中。

static Map< Thread,StackTraceElement[]> getAllStackTraces()

返回所有活动线程的堆栈跟踪的一个映射。

static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

返回线程由于未捕获到异常而突然终止时调用的默认处理程序。

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。

3.2、获取线程的信息

long getId()

返回该线程的唯一标识符。

String getName()

返回该线程的名称。

int getPriority()

返回线程的优先级。

Thread.State getState()

返回该线程的状态。

ThreadGroup getThreadGroup()

返回该线程所属的线程组。

ClassLoader getContextClassLoader()

返回该线程的上下文 ClassLoader。

StackTraceElement[] getStackTrace()

返回一个表示该线程堆栈转储的堆栈跟踪元素数组。

Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

返回该线程由于未捕获到异常而突然终止时调用的处理程序。

3.3、线程的其他操作

void checkAccess()

判定当前运行的线程是否有权修改该线程。

void interrupt()

中断线程。

boolean isInterrupted()

测试线程是否已经中断。

boolean isAlive()

测试线程是否处于活动状态。

boolean isDaemon()

测试该线程是否为守护线程。即后台线程

void setName(String name)

改变线程名称,使之与参数 name 相同。

void setPriority(int newPriority)

更改线程的优先级。

void setDaemon(boolean on)

将该线程标记为守护线程或用户线程。又叫后台线程(是后台提供一种通用的服务线程)

void setContextClassLoader(ClassLoader cl)

设置该线程的上下文 ClassLoader。

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

设置该线程由于未捕获到异常而突然终止时调用的处理程序。

void join()

等待该线程终止。

void join(long millis)

等待该线程终止的时间最长为 millis 毫秒。

void join(long millis, int nanos)

等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。

void start()

使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

String toString()

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

这篇文章主要是对于线程的一些常用的api的总结,可以收藏起来需要的时候回忆或者看看。

原文发布于微信公众号 - 好好学java(SIHAIloveJAVA)

原文发表时间:2018-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

史上最全Java多线程面试题及答案

多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域。所以,学好多线程并发编程对Java程序员来来说极其重要的。 下面小编整理了60道最常见的Ja...

38511
来自专栏ml

java多线程的常用方法(以及注意事项)

1 /* 2 * 线程的常用方法 3 * 1.start(); 4 * 2.run(); 5 ...

2646
来自专栏Java Edge

JUC源码分析之CyclicBarrier简介关键方法与参数源码解析CountDownLatch和CyclicBarrier的区别与联系应用场景小结

3308
来自专栏Java编程技术

Java中线程池ThreadPoolExecutor原理探究

线程池主要解决两个问题:一方面当执行大量异步任务时候线程池能够提供较好的性能,,这是因为使用线程池可以使每个任务的调用开销减少(因为线程池线程是可以复用的)。另...

942
来自专栏用户2442861的专栏

《Java编程思想》学习笔记18——并发编程(一)

http://blog.csdn.net/chjttony/article/details/7039602

341
来自专栏Java与Android技术栈

Java8新的异步编程方式 CompletableFuture(一)

JDK 5引入了Future模式。Future接口是Java多线程Future模式的实现,在java.util.concurrent包中,可以来进行异步计算。

661
来自专栏JMCui

多线程编程学习三(线程间通信).

一、概要 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就是成为整体的必用方案之一。可以说,使线程进行通信后,系统...

2624
来自专栏静晴轩

Java 中的并发

如何创建一个线程 按 Java 语言规范中的说法,创建线程只有一种方式,就是创建一个 Thread 对象。而从 HotSpot 虚拟机的角度看,创建一个虚拟机...

3086
来自专栏Java 源码分析

Java多线程JUC

1. volatile 关键字 多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从...

2633
来自专栏个人随笔

Java 多线程 从无到有

个人总结:望对屏幕对面的您有所帮助 ? 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是...

2905

扫码关注云+社区