线程直接调用run()方法而不是start()方法
如果直接调用run()
方法而不是start()
方法会怎么样?
每个线程在一个单独的调用堆栈中启动。
从主线程调用run()
方法,run()
方法进入当前调用堆栈而不是新调用堆栈的开头。
参考示例代码:
package com.zyiz; class TestCallRun1 extends Thread { public void run() { System.out.println("running..."); } public static void main(String args[]) { TestCallRun1 t1 = new TestCallRun1(); t1.run();// fine, but does not start a separate call stack } }
执行上面示例代码,得到以下结果:
running...
如果直接调用run()
方法,则会出现问题。参考以下示例代码:
package com.zyiz; class TestCallRun2 extends Thread { public void run() { for (int i = 1; i < 5; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { System.out.println(e); } System.out.println(i); } } public static void main(String args[]) { TestCallRun2 t1 = new TestCallRun2(); TestCallRun2 t2 = new TestCallRun2(); t1.run(); t2.run(); } }
执行上面示例代码,得到以下结果:
1 2 3 4 1 2 3 4
正如在上面的程序中看到的那样,程序执行并没有上下文切换,因为这里t1
和t2
将被视为普通对象而不是线程对象。
上一篇:Java两次启动线程
下一篇:加入线程
分类导航
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
关注微信小程序
扫描二维码
程序员编程王