标签:顺序 cep 返回 除了 running syn 时间转换 完成 not
NEW==》start()==》Runable
Runable==》获取CPU==》Running
Running==》yield()==》Runable
Running==》Run()完成或异常退出==》Dead
Running==》join(),sleep()==》Blocked
Blocked==》sleep()结束,join()中断,I/O完成==》Runable
Running==》synchronized==》锁定Blocked
Running==》synchronized,wait(),释放锁==》等待Blocked
锁定Blocked==》同步锁被释放==》Runable
等待Blocked==》恢复锁notify()/notifyAll(),interrupt()==》锁定Blocked
线程在Running的过程中可能会遇到阻塞(Blocked)情况
此外,在runnable状态的线程是处于被调度的线程,此时的调度顺序是不一定的。Thread类中的yield方法可以让一个running状态的线程转入runnable
使用 TimeUnit 来替代 sleep。
? TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有线程中断了当前线程)。但是我们很多人并没有注意的一个潜在的问题就是它的可读性。Thread.sleep()是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。
TimeUnit.SECONDS.sleep(4);
? 除了sleep的功能外,TimeUnit还提供了便捷方法用于把时间转换成不同单位。
TimeUnit.SECONDS.toMillis(44); #返回44,000
标签:顺序 cep 返回 除了 running syn 时间转换 完成 not
原文地址:https://www.cnblogs.com/fengzzi/p/10033556.html