这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战
前言:昨天我们已经说过了线程创建的三种方式,三种方式都和Runnable接口息息相关,其中Runnable创建线程太单一了,Callable创建线程只有一个必须返回的信息所以拓展就比较难,那么今天我们来说线程常用的API则是在Thread类的基础之上。
API展示:
currentThread():查看当前正在执行的线程。
isAlive():测试线程是否处于活动状态,线程已经启动且尚未终止就是活动状态
stop():删除线程,但容易造成业务处理的不确定性,太暴力了调用时会抛出java.lang.ThreadDeath异常,此异常不需要显式地捕捉
sleep(long millis):在指定的时间(毫秒)内让当前线程休眠,并且不会失去任何监视器的所有权,其中还有一个sleep(long millis, int nanos)方法,我们一般不用,后面则是规定多少纳秒,在计算机中毫秒已经是很快了。
dumpStack():将当前线程的堆栈信息输出至标准错误流中,此方法一般用于调试。
interrupted():判断currentThread()是否已经中断,执行后具有清除状态标志值
isInterrupted():测试某个线程是否被中断,其中使用了native修饰测试调用本地的isInterrupted()。
interrupt():停止线程。使用了synchronized修饰,可以确定线程的安全。
suspend():暂停线程。极易容易造成公共同步对象被独占,其他线程无法访问共同同步对象的结果,目前已不推荐使用。
resume():恢复线程。我们可以看到他和suspend()是相对的,在暂停后可以使用resume()进行恢复。目前已不推荐使用。
setDaemon(true):设置守护线程。
- 我们首相要了知道有User Thread(用户线程)和Daemon Thread(守护线程),而从他两本质上来说并没有什么区别,唯一的不同之处就在于虚拟机的离开后如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了,也就是说一个公司下班了,只有一个守护线程手上有钥匙,其他的为普通员工,只有普通员工走完后,守护线程才可以关门然后自己也离开公司。