【Java并发编程】之四:守护线程与线程阻塞的四种情况
来源:互联网 发布:编程语言实现模式 源码 编辑:程序博客网 时间:2024/06/08 05:17
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981
守护线程
Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)
用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,VM就会退出,因为没有如果没有了被守护这,也就没有继续运行程序的必要了。如果有非守护线程仍然存活,VM就不会退出。
守护线程并非只有虚拟机内部提供,用户在编写程序时也可以自己设置守护线程。用户可以用Thread的setDaemon(true)方法设置当前线程为守护线程。
虽然守护线程可能非常有用,但必须小心确保其他所有非守护线程消亡时,不会由于它的终止而产生任何危害。因为你不可能知道在所有的用户线程退出运行前,守护线程是否已经完成了预期的服务任务。一旦所有的用户线程退出了,虚拟机也就退出运行了。 因此,不要在守护线程中执行业务逻辑操作(比如对数据的读写等)。、
另外有几点需要注意:
1、setDaemon(true)必须在调用线程的start()方法之前设置,否则会跑出IllegalThreadStateException异常。
2、在守护线程中产生的新线程也是守护线程。
3、 不要认为所有的应用都可以分配给守护线程来进行服务,比如读写操作或者计算逻辑。
线程阻塞
线程可以阻塞于四种状态:
1、当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之后,或者阻塞被另一个线程打断;
2、当线程碰到一条wait()语句时,它会一直阻塞到接到通知(notify())、被中断或经过了指定毫秒时间为止(若制定了超时值的话)
3、线程阻塞与不同I/O的方式有多种。常见的一种方式是InputStream的read()方法,该方法一直阻塞到从流中读取一个字节的数据为止,它可以无限阻塞,因此不能指定超时时间;
4、线程也可以阻塞等待获取某个对象锁的排他性访问权限(即等待获得synchronized语句必须的锁时阻塞)。
注意,并非所有的阻塞状态都是可中断的,以上阻塞状态的前两种可以被中断,后两种不会对中断做出反应
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况 (r)
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- java并发编程(四)--守护线程与线程阻塞的四种情况
- Java并发编程(4):守护线程与线程阻塞的四种情况
- Java挑战高并发(4):守护线程与线程阻塞的四种情况
- Java并发编程之四:守护线程和线程阻塞
- 守护线程与阻塞线程的四种情况
- 守护线程与阻塞线程的四种情况
- 守护线程与线程阻塞的四种情况
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week1深度学习的实用层面
- Android之无限轮播图源代码
- Vuejs中的 一些指令和案例
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-C-Coconut
- Android应用该用H5开发还是原生开发?
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- linux查看系统的日志的一些实用操作
- GIT常用命令备忘
- CountDownLatch
- 关于ROS环境搭建的一些问题
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-E-Half-consecutive Numbers
- Maven项目引入log4j的详细配置
- 【上外青年】人物 ‖ 何晗:天才都是异类
- tar.xz文件的压缩解压