线程状态
线程方法
方法 | 说明 |
---|---|
setPriority(int newPriority) | 更改线程的优先级 |
static void sleep(long millis) | 再指定的毫秒数内让当前正在执行的线程休眠 |
void join() | 等待该线程终止 |
static void yield() | 暂停当前正在执行的线程对象,并执行其他线程 |
void interrupt() | 中断线程,别用这个方式 |
boolean isAlive() | 测试线程是否处于活动状态 |
停止线程
- 不推荐使用JDK提供的stop()、destroy()方法【已废弃】
- 推荐线程自己停下来
- 建议使用一个标志位进行终止变量。当flag = false时,则终止线程运行
例:
线程休眠——sleep
- sleep()指定当前线程阻塞的毫秒数(1000毫秒 = 1秒)
- sleep存在异常interruptedException
- sleep时间达到后线程进入就绪状态
- sleep可以模拟网络延时,倒计时等
- 每一个对象都有一个锁,sleep不会释放锁
例:
①模拟倒计时
②打印系统当前时间
线程礼让——yield
- 礼让线程,让当前正在执行的线程暂停,但不阻塞
- 将线程从运行状态转为就绪状态
- 让CPU重新调度,礼让不一定成功,看CPU心情
例:
以上两段代码一样,但结果不同,礼让不一定成功
线程强制执行——join
- Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞
- 可以现象成插队
例:
线程状态观测
- Thread.State
线程可以处于以下状态之一:
NEW:尚未启动的线程处于此状态
RUNNABLE:在Java虚拟机种执行的线程处于此状态
BLOCKED:被阻塞等待监视器锁定的线程处于此状态
WAITING:正在等待另一个线程执行动作的线程处于此状态
TIMED_WAITING:正在等待另一个线程执行动作达到指定等待的线程处于此状态
TERMINATED:已退出的线程处于此状态
一个线程可以在给定时间处于一个状态。这些状态是不反映任何操作系统线程状态的虚拟机状态。
注:可查看JDK帮助文档
例: