Java中线程的实现方式
1:继承Thread类
2:实现Runnable接口
3:实现Callable接口
Java线程的生命周期
1:新建(New) 在你new Thread时候处于的状态
2:就绪(Runnable)在线程调用start方法后,还未被cpu调度的状态
3:运行(Running)处于就绪状态的线程被CPU调度后的状态
4:等待/超时等待(wait/time wait)线程调用wait或者sleep后处于的状态
5:阻塞(Blocking)线程因未获取到锁,或者处于IO状态等原因处于的状态
6:死亡(Terminated)线程死亡
第一次调用start()方法
此时线程进入就绪状态并等待CPU的调度
Thread t1 = new Thread(()->{
System.out.println("线程启动啦");
});
t1.start();
第二次调用start()方法
Thread t1 = new Thread(()->{
System.out.println("线程启动啦");
});
t1.start();
t1.start();
由于Java语言规定,一个线程在它的生命周期中只能启动一次,如果再次调用该线程的start()方法,则JVM会抛出一个非法线程状态的异常
Exception in thread "main" java.lang.IllegalThreadStateException
即使在线程执行完run方法退出后,再次调用start()方法也会抛出异常
Thread t1 = new Thread(()->{
System.out.println("线程启动啦");
});
t1.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
t1.start();
为什么Java中线程不允许多次被启动?
多次调用 start()
方法被认为是编程错误,因为线程的生命周期只有一个,它不应该被重复启动。
如果你需要重新执行线程的任务,你应该创建一个新的线程实例并启动它