public class ThreadDemo extends Thread { @Override public void run() { for(int i = 0; i <= 5; i++) { try { System.out.println(currentThread().getName() + "---" + i); sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { ThreadDemo t = new ThreadDemo(); t.setName("t"); t.start(); //打印的是t线程 t.run(); //打印主线程main } }
结果:
![](https://img2020.cnblogs.com/blog/1090973/202008/1090973-20200804231251835-1519099657.png)
分析:
1 程序运行开始,jvm会自动创建线程main,也就是主线程
2 主线程在执行代码时,创建一个线程,当线程调用start()后,就启用了线程,
主线程继续往下执行代码。被启用的线程内部会自动调用run方法(start0() 本地方法或者说底层操作系统),
所以此时run方法是在该线程内运行
3 实例.run()仅仅只是调用对象的方法,与普通方法无差别,并没有启动新的线程,所以该方法还是在main线程内使用