【并发编程】Thread类的详细介绍

本文详细介绍了Java中的Thread类及其常用方法,如获取堆栈信息、线程状态、线程组操作、中断、唤醒、线程生命周期管理等,为开发者提供了一线程编程的基础指南。
  • thread.getStackTrace():获取堆栈信息。

  • thread.getState():获取线程状态。

  • thread.getThreadGroup():获取线程所在线程组。

  • thread.interrupt():使得指定线程中断阻塞状态,并将阻塞标志位置为true。

  • thread.interrupted():测试当前线程是否被中断。

  • thread.isAlive():判断线程是否还存活着。

  • thread.isDaemon():判断线程是否是守护线程。

  • thread.join():在当前线程中加入指定线程,使得当前线程必须等待指定线程运行结束之后,才能结束。可以理解成线程插队、等待该线程终止。

  • Thread.sleep(long):强制线程睡眠一段时间。

  • thread.start():启动一个线程。

  • thread.setName(name):设置线程的名字。

  • thread.setPriority(priority):设置线程的优先级。

  • thread.setDaemon(true):将指定线程设置为守护线程。

  • thread.yield():使得当前线程退让出CPU资源,把CPU调度机会分配给同样线程优先级的线程。

  • object.wait()、object.notify()、object.notifyAll():Object类提供的线程等待和线程唤醒方法。

示例代码


public class MyThread {

public static void main(String[] args) {

Thread thread = Thread.currentThread();

//这个方法返回的是当前线程所在线程组以及这个线程组的子线程组内活动的线程数

//这个值是一个估计值,所以这个方法的应用场景不大

int activeCount = Thread.activeCount();

System.out.println(“当前系统中活动线程数[”+activeCount+“]”);

//向标准错误输出流输出当前的线程栈,不会阻断程序的继续执行

Thread.dumpStack();

//获取所有线程栈信息

Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces();

//获取类加载器

ClassLoader contextClassLoader = thread.getContextClassLoader();

//获取当前线程名字

String threadName = thread.getName();

System.out.println(“current thread name[”+threadName+“]”);

//获取当前线程ID

long threadId = thread.getId();

System.out.println(“current thread id[”+threadId+“]”);

//获取当前线程的优先级,一共有1~10总共10个优先级,这个优先级并不是在

//所有平台都生效的

int priority = thread.getPriority();

System.out.println(“current thread priority[”+priority+“]”);

StackTraceElement[] stackTrace = thread.getStackTrace();

System.out.println(“-------------stackTrace info--------------”);

for (int i = 0; i < stackTrace.length; i++) {

StackTraceElement element = stackTrace[i];

System.out.println(“className:[”+element.getClassName()+“]”);

System.out.println(“fileName:[”+element.getFileName()+“]”);

System.out.println(“line nunber:[”+element.getLineNumber()+“]”);

System.out.println(“method name:[”+element.getMethodName()+“]”);

System.out.println(“is native method:[”+element.isNativeMethod()+“]”);

System.out.println(“------------------------------------------”);

}

Thread.State state = thread.getState();

System.out.println(“thread state:[”+state+“]”);

ThreadGroup threadGroup = thread.getThreadGroup();

String threadGroupName = threadGroup.getName();

System.out.println(“thread group name:[”+threadGroupName+“]”);

//线程睡眠,调用sleep方法会使得线程进入timed_waiting状态,如果线程已经

//获得了锁资源,调用sleep方法是不会释放这个锁的

Thread.sleep(2000,500);

Thread.sleep(1000);

TimeUnit.SECONDS.sleep(2);

Thread thread1 = new Thread(new Runnable() {

@SneakyThrows

@Override

public void run() {

TimeUnit.SECONDS.sleep(100);

}

});

thread1.start();

thread1.join(50);

}

}

守护线程


守护线程可以理解为服务线程,他们的作用就是服务于其他用户线程。当系统中不存在其他用户线程时,这些守护线程也会自动消亡。比如JVM的垃圾清理线程就是守护线程。我们可以使用如下方法查看和设置线程是否是守护线程。

thread.isDaemon();

thread.setDaemon(true);

join方法


调用线程的join方法会使得调用线程进入waiting状态,直到被调用的线程执行结束,调用线程才会重新获得执行的机会。

public class MyThread {

public static void main(String[] args) throws Exception {

Thread thread1 = new Thread(new Runnable() {

@SneakyThrows

@Override

public void run() {

TimeUnit.SECONDS.sleep(100);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!

金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

三面蚂蚁核心金融部,Java开发岗(缓存+一致性哈希+分布式)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。**

[外链图片转存中…(img-cInUHG9D-1713547737549)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值