我们可以直接调用run()方法来启动新线程吗
如果直接调用run方法,它将成功’创建一个新线程,它将与main在同一堆栈中。
让我们借助示例来理解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
包 组织.Arpit.爪哇2blog; 类 自定义线程 延伸 线 { 上市 虚空 跑() { 对于 (整型 i = 0; i < 5; i++) { 尝试 { 线.睡觉(300); } 抓住 (InterruptedException e) { e.printStackTrace(); } 系统.出.打印(“线程正在运行:”+i); } } } 上市 类 StartThreadAgainMain { 上市 静态的 虚空 主要(串[] args) { 自定义线程 ct1 = 新 自定义线程(); 自定义线程 ct2 = 新 自定义线程(); ct1.跑(); ct2.跑(); } } |
在程序上方运行时,将获得以下输出:
1 2 3 4 5 6 7 8 9 10 11 12 |
线 是 跑步 :0 线 是 跑步 :1 线 是 跑步 :2 线 是 跑步 :3 线 是 跑步 :4 线 是 跑步 :0 线 是 跑步 :1 线 是 跑步 :2 线 是 跑步 :3 线 是 跑步 :4 |
如您所见,当我们直接调用run方法时,它并没有创建新线程。
如果在上面的示例中使用start而不是run:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
包 组织.Arpit.爪哇2blog; 类 自定义线程 延伸 线 { 上市 虚空 跑() { 对于 (整型 i = 0; i < 5; i++) { 尝试 { 线.睡觉(300); } 抓住 (InterruptedException e) { e.printStackTrace(); } 系统.出.打印(“线程正在运行:”+i); } } } 上市 类 StartThreadAgainMain { 上市 静态的 虚空 主要(串[] args) { 自定义线程 ct1 = 新 自定义线程(); 自定义线程 ct2 = 新 自定义线程(); ct1.开始(); ct2.开始(); } } |
在程序上方运行时,将获得以下输出:
线程在运行:0
线程正在运行:1
线程正在运行:1
线程正在运行:2
线程正在运行:2
线程正在运行:3
线程正在运行:3
线程正在运行:4
线程正在运行:4
您不能直接调用run方法创建线程,而需要调用start方法创建新线程。
你可以经历 面向初学者和经验丰富的Java核心面试问题 有关更多此类问题。