Thread中start()和run()的区别
2015-08-23 21:44
453 查看
Thread类包含start()和run()方法,有些人以为这两个方法作用一致,那就就大错特错了
start() 方法的作用是启动一个新线程,新线程会执行相应的run()方法,start()不能被重复调用。
而run()方法则只是普通的方法调用,在调用线程中顺序运行而已。
以下代码来进行说明:
执行结果如下,可见两线程的确是并发执行的。
将上面的start()改为run()后
可见两线程实际是顺序执行的
*附start() 和 run()相关源码(基于JDK1.7.0_40)
start() 方法的作用是启动一个新线程,新线程会执行相应的run()方法,start()不能被重复调用。
而run()方法则只是普通的方法调用,在调用线程中顺序运行而已。
以下代码来进行说明:
public class Main { public static void main(String[] args) { Thread t1 = new Thread(new T1()); Thread t2 = new Thread(new T2()); t1.start(); t2.start(); } } class T1 implements Runnable { public void run() { try { for(int i=0;i<10;i++){ System.out.println(i); Thread.sleep(100); //模拟耗时任务 } } catch (InterruptedException e) { e.printStackTrace(); } } } class T2 implements Runnable { public void run() { try { for(int i=0;i>-10;i--){ System.out.println(i); Thread.sleep(100); //模拟耗时任务 } } catch (InterruptedException e) { e.printStackTrace(); } } }
执行结果如下,可见两线程的确是并发执行的。
将上面的start()改为run()后
public class Main { public static void main(String[] args) { Thread t1 = new Thread(new T1()); Thread t2 = new Thread(new T2()); t1.run(); t2.run(); } }
可见两线程实际是顺序执行的
*附start() 和 run()相关源码(基于JDK1.7.0_40)
public synchronized void start() { // 如果线程不是"就绪状态",则抛出异常! if (threadStatus != 0) throw new IllegalThreadStateException(); // 将线程添加到ThreadGroup中 group.add(this); boolean started = false; try { // 通过start0()启动线程,新线程会调用run()方法 start0(); // 设置started标记=true started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { } } }
public void run() { if (target != null) { target.run(); } }
相关文章推荐
- java-模拟tomcat服务器
- Run As Service runassrv.exe 详细参数第1/2页
- 安装MySQL在最后的start service停住了解决方法
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 批处理命令Start的使用介绍
- 用vbs列出注册表中 Run 项中的所有项目
- PHP中header和session_start前不能有输出原因分析
- Android开发笔记之:如何安全中止一个自定义线程Thread的方法
- java thread start()和run()方法简析
- Java中Runnable和Thread的区别分析
- Android开发笔记之:Handler Runnable与Thread的区别详解
- C#多线程之Thread中Thread.Join()函数用法分析
- nunit使用指南之―NUnit Quick Start
- Mysql Error Code : 1436 Thread stack overrun
- MySQL错误Forcing close of thread的两种解决方法
- c#线程Thread示例
- phpmyadmin出现Cannot start session without errors问题解决方法
- Java之Thread的join方法实例
- Redis(三)高级应用
- 线程操作类