停止线程 & 守护线程 & 线程阻塞

简介: 停止线程 & 守护线程 & 线程阻塞

问:运行一半的线程能否强制杀死?

在Java中, stop()、destory() 之类的函数官方明确不建议这样使用, 如果强制杀死线程,则线程中使用到的资源, 例如   文件描述符, 网络连接等不正常关闭。


一个线程一旦运行起, 就不要强行打断它, 合理的关闭方法是让其运行完(也就是函数执行完毕), 干净的释放掉所有的资源, 然后退出。如果一个不断运行的线程,就需要用到线程间通信机制,让主线程通知其退出。


守护线程

  当在一个JVM进程里开多个线程时, 这些线程被分成两类:守护线程和非守护线程。默认开的是非守护线程。


当所有的非守护线程退出后, 整个JVM进程就会退出。意思是 守护线程“不算数”, 守护线程不影响整个JVM进程的退出。 例如:垃圾回收线程就是守护线程, 他们在后台默默工作, 当开发者的所有前台线程(非守护线程)都退出之后, 整个JVM进程就退出了。


InterruptedException 函数与Interrupt  函数

什么情况下会抛出interrupted 异常


只有声明了会抛出interruptedException 的函数才会抛出异常


例如

public static native void sleep(long millis) throws InterruptedException{...}
public final void wait() throws InterruptedException{...}
public final void join() throws InterruptedException{...}

轻量级阻塞与重量级阻塞

轻量级阻塞 :能够被中断的阻塞。对应的线程状态时Waiting 或者 Timed_Waiting

重量级阻塞 :像synchronized 这种不能被中断的阻塞。对应的状态Blocked


t.isInterrupted() 与 Thread.interrupted() 函数

t.interrupted()相当于给线程发送一个唤醒的信号, 如果线程此时恰处于waiting 或者 timed_waiting 状态, 就会抛出一个InterruptedException,并且线程被唤醒。而如果线程此时并没有阻塞,则线程什么都不会做。但在后续,线程可以判断自己是否收到过其他线程发来的中断信号,然后做一些对应的处理。

前者是静态函数,后者是非静态函数, 两者之间的区别在于前者只是读取中断状态,不做修改状态; 后者不仅读取中断状态, 还会重置中断标志位。

收录于合集 #Java线程

2

下一篇并行,并发?


目录
相关文章
|
6月前
|
安全 Java
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
|
7月前
|
Arthas IDE Java
一种获取阻塞线程栈帧数据的思路
一种获取阻塞线程栈帧数据的思路
125 1
|
1月前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
73 0
|
6天前
|
监控
写一个线程来监控各线程是否发生阻塞
写一个线程来监控各线程是否发生阻塞
16 0
|
7月前
|
Arthas 测试技术
如何检测由synchronized或Lock引起的线程阻塞问题
如何检测由synchronized或Lock引起的线程阻塞问题
110 0
|
7月前
|
Arthas 消息中间件 监控
记一次SSL握手导致业务线程阻塞的案例分析
记一次SSL握手导致业务线程阻塞的案例分析
108 0
|
9月前
|
缓存 运维 监控
SSL Session默认设置导致线程阻塞了几十秒的案例分析
SSL Session默认设置导致线程阻塞了几十秒的案例分析
113 0
|
9月前
线程阻塞问题
CompletableFuture.supplyAsync()执行线程,任务内有sleep方法休眠等待。导致主线程阻塞。
41 0
|
5月前
|
C++ Windows
[√]window下子线程CCLOG导致主线程阻塞问题
[√]window下子线程CCLOG导致主线程阻塞问题
116 0
|
6月前
|
Java 数据库
【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源
【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源