黑马程序员技术交流社区

标题: 【西安校区】守护线程及六种线程状态简介 [打印本页]

作者: 逆风TO    时间: 2020-3-4 16:11
标题: 【西安校区】守护线程及六种线程状态简介
守护线程及六种线程状态简介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执行概率问题。

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








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2