线程02-线程api
Posted luohoufa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程02-线程api相关的知识,希望对你有一定的参考价值。
sleep:使当前线程进入指定毫秒数的休眠,暂停执行,最终要以系统的定时器和调度器的精度为准;
休眠时,其不会放弃monitor锁的所有权;
强烈建议使用TimeUnit替代sleep;
yield:提醒调度器我愿意放弃当前CPU资源,如果CPU资源不紧张,则会忽略这种提醒;
一般这个方法不常用;
yield和sleep的区别
sleep会导致当前线程暂停指定的时间,没有CPU时间片的消耗;
yield只是对CPU调度器的一个提示,如果CPU调度器没有忽略这个提示,它会导致线程上下文的切换;
sleep会使线程短暂block,会在给定的时间内释放CPU资源;
yield会使用running状态的线程进入runnable状态(如果CPU调度器没有忽略这个提示的话);
sleep会完成给定时间的休眠,而yield的提示并不能一定担保;
一个线程sleep另一个线程调用interrupt会捕获到中断信号,而yield不会;
setPriority, getPriority
设置和获取线程的优先级,一般不使用;
getId:获取线程的唯一ID,线程的ID在整个JVM进程中都会是唯一的;
currentThread:返回当前执行线程的引用;
getContextClassLoader, setContextClassLoader
获取和设置该线程的上下文的类加载器;
interrupt, interrupted, isInterrupted
interrupt:当线程进入阻塞状态时,另一个线程调用被阻塞线程的interrupt方法,则会打断这种阻塞;
一旦线程在阻塞的情况下被打断,都会抛出InterruptedException的异常;
isInterrupted:判断当前线程是否被中断
interrupted:判断当前线程是否被中断,当线程被打断时,第一次调用interrupted时为true,
第二次包括以后的调用永远都会返回false(除非在此期间线程又一次被打断)
join
join某个线程A,会使当前线程B进入等待,直到线程A结束生命周期,或到达给定的时间,
那么此期间B线程是处于blocked的;
可用CountDownLatch和CyclicBarrier等完成类似的功能;
如何关闭一个线程
stop,不推荐使用
正常关闭
1. 线程结束生命周期正常结束
2. 捕获中断信号关闭线程
3. 使用volatile开关控制
异常退出
进程假死:大多是某个线程阻塞了,或线程出现死锁的情况;
诊断工具:jstack, jconsole, jvisualvm
以上是关于线程02-线程api的主要内容,如果未能解决你的问题,请参考以下文章