守护线程与阻塞线程的四种情况

Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)

用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,VM就会退出,因为如果没有了守护者,也就没有继续运行程序的必要了。如果有非守护线程仍然活着,VM就不会退出。

守护线程并非只有虚拟机内部提供,用户在编写程序时也可以自己设置守护线程。用户可以用Thread的setDaemon(true)方法设置当前线程为守护线程。

虽然守护线程可能非常有用,但必须小心确保其它所有非守护线程消亡时,不会由于它的终止而产生任何危害。因为你不可能知道在所有的用户线程退出运行前,守护线程是否已经完成了预期的服务任务。一旦所有的用户线程退出了,虚拟机也就退出运行了。因此,不要再守护线程中执行业务逻辑操作(比如对数据的读写等)。

还有几点:

  • setDaemon(true)必须在调用线程的start()方法之前设置,否则会跑出IllegalThreadStateException异常。
  • 在守护线程中产生的新线程也是守护线程
  • 不要认为所有的应用都可以分配给守护线程来进行服务,比如读写操作或者计算逻辑。

线程阻塞

线程可以阻塞于四种状态:

  • 当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之后,或者阻塞被另一个线程打断
  • 当线程碰到一条wait()语句时,它会一直阻塞到接到通知(notify())、被中断或经过了指定毫秒 时间为止(若指定了超时值的话)
  • 线程阻塞与不同的I/O的方式有多种。常见的一种方式是InputStream的read()方法,该方法一直阻塞到从流中读取一个字节的数据为止,它可以无限阻塞,因此不能指定超时时间
  • 线程也可以阻塞等待获取某个对象锁的排它性访问权限(即等待获得synchronized语句必须的锁时阻塞)

并非所有的阻塞状态都是可中断的,以上阻塞状态的前两种可以被中断,后两种不会对中断做出反应。

原文来源:

https://github.com/francistao/LearningNotes/blob/master/Part2/JavaConcurrent/%E5%AE%88%E6%8A%A4%E7%BA%BF%E7%A8%8B%E4%B8%8E%E9%98%BB%E5%A1%9E%E7%BA%BF%E7%A8%8B.md

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 进程:进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位,拥有独立的内存空间和执行环境。 2. 线程线程是进程中的一个执行单元,是程序执行的最小单位。一个进程可以包含多个线程,它们共享进程的资源,但每个线程有自己的执行路径。 3. 状态:线程和进程都有不同的状态,常见的有以下几种: - 就绪状态:线程已经创建,但还没有开始执行。 - 运行状态:线程正在执行。 - 阻塞状态:线程暂时停止执行,等待某个条件满足后再继续执行。 - 终止状态:线程执行完毕或者出现异常而终止。 4. 阻塞阻塞是指线程暂时停止执行,等待某个条件满足后再继续执行。常见的阻塞情况包括等待输入/输出完成、等待锁、等待其他线程完成等。 5. 优先级:线程的优先级决定了线程在竞争CPU资源时的优先级别。优先级高的线程会更有可能被调度执行,但并不保证一定会被执行。 6. 同步:同步是指多个线程之间按照一定的顺序执行,以避免出现数据不一致或者并发访问共享资源的问题。常见的同步机制包括使用锁、信号量、条件变量等。 7. 死锁:死锁是指两个或多个线程互相持有对方需要的资源,导致它们都无法继续执行的状态。这种情况下,线程会一直等待对方释放资源,从而陷入无限等待的状态。 8. 守护:守护线程是一种特殊的线程,它的生命周期与进程的生命周期相关联。当所有的非守护线程结束时,守护线程也会自动结束。守护线程通常用于执行一些后台任务,如垃圾回收等。 9. 线程安全:线程安全是指多个线程同时访问某个共享资源时,不会出现数据不一致或者并发访问的问题。为了实现线程安全,可以使用同步机制或者使用线程安全的数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值