多线程基础(三)---生命周期
多线程基础(三)---生命周期
多线程执行,谁先抢占到CPU资源谁先执行,所以一个线程不会一直执行,线程的状态会在运行、阻塞、就绪之间进行切换
线程的生命周期
传沟线程的生命周期有5个,分别是新建(new),就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead)
新建:new Thread之后处于新建状态,没有启动
就绪:调用start之后,线程启动,处于就绪状态
运行:处于就绪状态的线程抢占到cpu资源就进入运行状态,执行run方法中的代码
阻塞:当running中的线程因为某种原因而进入阻塞状态
死亡:当线程的代码执行完、强制退出、遇到异常等情况,会退出线程,释放资源
哪些情况会进入阻塞状态
等待阻塞:当运行线程调用wait方法后会将线程放入等待池,需调用notify和notifyall来讲阻塞状态变成runnable状态
同步阻塞:线程获取对象的同步锁的时候,该锁已经被其他线程获取
其他阻塞:调用sleep、join方法也会进入阻塞状态
Java中定义的六个线程状态
NEW,对应传统线程的新建状态
RUNNABLE,没有区分就绪和运行,这两个状态都称为RUNNABLE
BLOCKED,阻塞等待的时候进行该状态
WAITING,调用join、wait的时候没有指定时间进入该状态
TIMED_WAITING,调用join、wait的时候没有指定时间指定时间进入该状态
TERMINATED;对应传统线程的死亡状态
如何设置优先级
在调用start之间调用setPriority(数字),这里数字为1-9,越大优先级越高,抢占cpu资源的概率更大
守护线程
Java的线程分成两类,守护线程和用户线程
守护线程:运行在后台,为前台的线程提供服务,典型的守护线程是垃圾回收器
用户线程:运行在前台,执行具体任务,程序的主线程、连接网络的线程都是用户线程。
用户线程之间是独立的,一个结束了不影响其他。守护线程依赖于用户线程,用户线程结束,守护线程也会跟着结束
如何设置为守护线程
在start之前调用setDaemon(true)
注意:
1、默认不设置都为用户线程
2、不能设置已经启动的线程
3、守护线程内部开启的线程还是守护线程
sleep的作用
sleep是让当前执行的线程进入阻塞状态
join的作用
让当前的线程进行等待子线程运行完。在当前线程调用子线程的join方法

浙公网安备 33010602011771号