案例代码
@Slf4j public class Client { public static void main(String[] args) { Thread t1 = new Thread("t1") { @Override public void run() { log.info("t1 start..."); } }; t1.start(); } }
t1.start() 到底做了哪些事情,我们可以看一下 Thread 类的 start() 方法
public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.add(this); boolean started = false; try { start0(); started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { } } }
从上面的源码中可以看出在 start() 方法中又调用了 start0() 方法
private native void start0();
而 start0() 方法是 native 修饰的,其调用的是 C/C++ 的库函数,底层的逻辑也是由 C/C++ 实现的
其底层实际上的逻辑大致是,如果在 Java 中线程对象调用 start() 方法之后操作系统的任务调度器会让其进行调度,线程进入就绪状态,等待操作系统分配 CPU 时间片,如果分配到了 CPU 时间片之后,那么将会执行线程对象中的 run() 方法
注意:start() 方法只能调用一次,如果多次调用 start() 方法,会抛出 java.lang.IllegalThreadStateException 异常
标签:Thread,void,t1,start,方法,start0 From: https://www.cnblogs.com/xiaomaomao/p/17028881.html