Java并发编程面试题

1.java守护线程和用户线程的区别
答:任何线程都可以设置为守护线程和用户线程,通过方法thread.setDeamon(线程),返回true则设置为守护线程,返回false则设置为用户线程;thread.setDeamon()在thread.start()方法前调用,否则会抛出异常。
守护线程与用户线程的主要区别:判断JVM何时撤离,守护线程为其他线程提供服务,如果用户线程全部撤离,守护线程没有可服务的线程,JVM只剩下守护线程,就会撤离;守护线程是JVM创建的线程(不一定),用户线程是程序创建的线程。
扩展

  • jstack打印指定进程中线程信息:
jstack -l <pid> | grep <thread-hex-id> -A 10

-l 长列表,打印关于锁的附加信息
-m 打印java和jni框架的所有栈信息
<pid> 进程id
<thread-hex-id> 系统线程id
-A 10 显示10行

在这里插入图片描述
线程名称----Thread-(数字),
线程类型(守护线程有deamon),
线程优先级----prio,
JVM线程id----tid,通过java.lang.Thread.getId()获取
系统线程id----nid,十六进制形式,通过top命令查看
系统线程状态----runnable
起始栈地址
JVM线程状态-----java.lang.Thread.State:RUNNABLE
线程调用栈详细信息----从下向上解读,因为程序调用是从下向上的

参考:JVM故障分析及性能优化系列之一:使用jstack定位线程堆栈信息
参考:Thread Dump日志信息
参考:学习java线程状态和看懂thread dump文件中的线程信息

参考:进程、线程状态查看命令:top、strace、pstack
参考:jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
参考:jstack生成的Thread Dump日志线程 分析

  • 守护进程
  • 守护进程本身就是一个子进程,当主进程需要将任务并发执行的时候,就需要开启子进程;
  • 当子进程执行任务的生命周期伴随主进程的生命周期时,就需要将该子进程做成守护进程;
  • 主进程的代码执行完毕后,守护进程此时就被回收,然后主进程等待其他非守护进程执行完毕后回收子进程的资源,才会结束。
  • 守护线程
  • 守护线程为当前进程其他线程服务,守护线程在当前进程的其他线程结束后,守护线程才会挂掉
  • 主线程等待所有自线程运行完毕后,守护线程此时被回收。主线程结束意味着进程结束,进程资源被回收
  • 主进程等待子进程结束是要回收子进程的资源;主线程等待子线程执行完毕后结束

参考:守护进程和守护线程的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值