public class WelComeApp { public static void main(String[] args) { WelcomeThread thread = new WelcomeThread(); thread.start(); System.out.printf("1.Welcome, I'm %s.%n", Thread.currentThread().getName()); } public static class WelcomeThread extends Thread { @Override public void run() { System.out.printf("2.Welcome, I'm %s.%n", Thread.currentThread().getName()); } } }
public class WelComeApp1 { public static void main(String[] args) { Thread thread = new Thread(() -> System.out.printf("2.Welcome, I'm %s.%n", Thread.currentThread().getName())); thread.start(); System.out.printf("1.Welcome, I'm %s.%n", Thread.currentThread().getName()); } }
Thread
实例调用过start
方法后,就不能再次调用,否则会出现 java.lang.IllegalThreadStateException
异常信息位于Thread#State
枚举列表出6个状态
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
NEW
刚刚创建好的线程对象,在Start
方法之前
RUNNABLE
在它的内部有两个子状态、ready,running
。线程一定是在被cpu调度到了,再一切准备完毕下才能开始工作。
那么READY
就是获取到CPU资源,准备就绪,可以执行。
RUNNING
表示正在程序正在执行,对应到是java
代码里的run
方法。
BLOCKED
阻塞的, 通常我们说这个形容词都是在文件系统才用的到,这里也可以这么的认为,当前线程被一个I/O操作给阻塞住了,当前所占的cpu资源被分配去做其他事情了!等阻塞完后,再申请CPU资源回到RUNABLE
状态。
WAITING
产生这些状态一搬在当前线程调用了Object.wait()
、Thread.join()
调用Object.notify()/Object.notifyAll()
回到RUNABLE
TIMED_WAITING
WAINT状态是有等待某个其他线程结束,而当前状态是带有事件的概念在里面,我可以等,你有时间限制。
TERMINATED
这没啥好说的,当前线程结束。
参考