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

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

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

在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

下一篇并行,并发?


目录
相关文章
|
8月前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
205 5
|
8天前
|
Java API 调度
【JavaEE】——多线程(join阻塞,计算,引用,状态)
【JavaEE】——多线程,join,sleep引起的线程阻塞,多线程提升计算效率,如何获取线程的引用和状态
|
1月前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
35 2
|
1月前
|
监控 Java 开发者
Java线程管理:守护线程与本地线程的深入剖析
在Java编程语言中,线程是程序执行的最小单元,它们可以并行执行以提高程序的效率和响应性。Java提供了两种特殊的线程类型:守护线程和本地线程。本文将深入探讨这两种线程的区别,并探讨它们在实际开发中的应用。
34 1
|
8月前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
591 0
【多线程面试题十二】、阻塞线程的方式有哪些?
线程阻塞的方式包括调用sleep()方法、阻塞式IO操作、等待同步监视器的获取、等待通知(notify),以及慎用的suspend()方法。
|
7月前
|
Java
java线程之用户线程与守护线程
java线程之用户线程与守护线程
java线程之用户线程与守护线程
|
7月前
|
前端开发 JavaScript
JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。
【6月更文挑战第22天】JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。回调是基础,用于在操作完成后执行函数;Promise管理异步状态,支持链式调用;async/await提供同步代码外观,简化错误处理。每种技术在处理耗时任务时都起着关键作用。
62 3
|
7月前
|
Java
【技术解码】Java线程的五味人生:新建、就绪、运行、阻塞与死亡的哲学解读!
【6月更文挑战第19天】Java线程生命周期如同人生旅程,经历新建、就绪、运行、阻塞至死亡五阶段。从`new Thread()`的诞生到`start()`的蓄势待发,再到`run()`的全力以赴,线程在代码中奔跑。阻塞时面临挑战,等待资源释放,最终通过`join()`或中断结束生命。线程的每个状态转变,都是编程世界与哲思的交汇点。
50 1
|
8月前
|
设计模式 安全 Java
Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)
Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)