java中thread线程start和run的区别

时间:2023-09-30 13:12:16 

最近看到一个题目,代码如下:


public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.println("ping");
}
static void pong() {
System.out.println("pong");
}

问,结果会输出什么?

我运行了很多次,结果都是pong ping。后来终于发现了关键点所在,线程对象t,调用的不是start()方法,而是run()方法。后来我开断点模式debug,发现调用run()方法,整个程序只有一个线程,而调用start()方法之后,程序就会多出一个线程。这时才有和主线程争cpu,可能出现多种结果的情况,但由于下面输出方法很快就被执行了,所以基本上都是“ping pong”的输出。

所以run()和start()的区别就是:
run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的。
而start()则是线程开始运行的标志,当这个方法被调用后,程序中才会多出一个独立的线程,接着便是执行run()方法。

所以我觉得,自己要写单独的线程,最好还是继承Thread来做,如果是实现接口的话,到主线程里,还是要new Thread(new YourRunnableClass())来调用,感觉很不方便。

标签:java,thread,线程
0
投稿

猜你喜欢

  • .net与javascript脚本的交互方法总结

    2021-09-11 09:21:32
  • Android编程实现AlertDialog自定义弹出对话框的方法示例

    2022-09-13 19:34:45
  • Android实现手机游戏隐藏虚拟按键

    2023-01-29 02:04:55
  • Java基于解释器模式实现定义一种简单的语言功能示例

    2021-06-18 15:53:42
  • Intellij IDEA 2020.3 配置教程详解

    2023-07-01 21:34:23
  • Java在制作jar包时引用第三方jar包的方法

    2023-02-18 23:25:10
  • 浅析Android 模拟键盘鼠标事件

    2022-12-19 00:11:14
  • 一文读懂Spring Bean的生命周期

    2022-11-01 04:01:20
  • Mybatis RowBounds 限制查询条数的实现代码

    2022-11-18 17:26:03
  • Java IO流—异常及捕获异常处理 try…catch…finally

    2023-03-14 07:35:52
  • Java jar打包工具使用方法步骤解析

    2023-07-01 12:26:47
  • C#实现合并及拆分PDF文件的方法

    2021-06-15 12:55:23
  • Java实现配置加载机制

    2023-11-26 09:03:38
  • Android实现滑动选择控件实例代码

    2022-04-13 14:17:31
  • 详解Android 蓝牙通信方式总结

    2021-06-19 19:34:44
  • SpringMVC使用ResponseEntity实现文件上传下载

    2023-08-20 02:10:58
  • 深入HRESULT与Windows Error Codes的区别详解

    2023-10-16 15:19:42
  • SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)

    2023-10-02 05:20:58
  • IntelliJ IDEA运行SpringBoot项目的详细步骤

    2022-04-29 00:59:08
  • Android实现每天定时提醒功能

    2021-10-18 09:52:33
  • asp之家 软件编程 m.aspxhome.com