线程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的主要内容,如果未能解决你的问题,请参考以下文章

java从入门到精通API02

java从入门到精通API02

杰克音频套件 API 线程同步

JAVA多线程

JavaSE_03_Thread类02

Mono vs CompletableFuture