A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

守护线程及六种线程状态简介1. 守护线程
[Java] 纯文本查看 复制代码
守护线程一般用于:
	1. 自动下载
	2. 操作日志
	3. 操作监控

方法是通过线程对象
	setDeamon(boolean flag);
		true为守护线程
		false缺省属性,正常线程

2. 线程状态
2.1 六种线程状态
状态        导致状态的发生条件
NEW(新建)        线程刚刚被创建,没有启动,没有调用start方法
RUNNABLE(可运行)        线程已经可以在JVM中运行,但是是否运行不确定,看当前线程是否拥有CPU执行权
BLOCKED(锁阻塞)        当前线程进入一个同步代码需要获取对应的锁对象,但是发现当前锁对象被其他线程持有,当前线程会进入一个BLOCKED。如果占用锁对象的线程打开锁对象,当前线程持有对应锁对象,进入Runnable状态
WAITING(无限等待)        通过一个wait方法线程进入一个无限等待状态,这里需要另外一个线程进行唤醒操作。进入无限等待状态的线程是无法自己回到Runnable状态,需要其他线程通过notify或者notifyAll方法进行唤醒操作
TIMED_WAITING(计时等待)        当前线程的确是等待状态,但是会在一定时间之后自动回到Runnable状态,例如 Thread.sleep() 或者是Object类内的wait(int ms);
TERMINATED(被终止)        因为Run方法运行结束正常退出线程,或者说在运行的过程中因为出现异常导致当前线程GG思密达
4.2 TIMED_WAITING(计时等待)
[Java] 纯文本查看 复制代码
Thread.sleep(int ms);
	在对应线程代码块中,当前线程休眠指定的时间。
Object类内  wait(int ms);
	让当前线程进入一个计时等待状态
		1. 规定的时间及时完毕,线程回到可运行状态
		2. 在等待时间内,通过其他线程被notify或者notifyAll唤醒

Sleep方法
	1. 调用之后休眠指定时间
	2. sleep方法必须执行在run方法内,才可以休眠线程
	3. sleep不会打卡当前线程占用的锁对象。


4.3 BLOCKED(锁阻塞)
[Java] 纯文本查看 复制代码
线程中有锁存在,线程需要进入带有锁操作的同步代码,如果锁对象被别人持有,只能在锁外等待

锁阻塞状态的线程是否能够抢到锁对象有很多因素
	1. 优先级问题,非决定因素
	2. CPU执行概率问题。

后期高并发一定会存在多线程操作锁对象问题,秒杀,抢购...
	队列方式来处理锁对象。

4.3 BLOCKED(锁阻塞)
[Java] 纯文本查看 复制代码
线程中有锁存在,线程需要进入带有锁操作的同步代码,如果锁对象被别人持有,只能在锁外等待

锁阻塞状态的线程是否能够抢到锁对象有很多因素
	1. 优先级问题,非决定因素
	2. CPU执行概率问题。

后期高并发一定会存在多线程操作锁对象问题,秒杀,抢购...
	队列方式来处理



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马