java中thread线程start和run的区别

首页 > 软件编程 > java 更新日期: 2016-04-07
这篇文章主要介绍了java中thread线程start和run的区别,run是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的

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

代码如下:

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中Map与HashMap,Hashtable,HashSet的区别
    HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对key-value对:HashSet则实现了Set接口,性质类似于集合HashTable和HashMap区别 第一,继承的父类不同.Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类.但二者都实现了Map接口. 代码如下:public cl ...
  • Java中Hashtable类与HashMap类的区别详解
    Hashtable的应用非常广泛,HashMap是新框架中用来代替Hashtable的类,也就是说建议使用HashMap,不要使用Hashtable.可能你觉得Hashtable很好用,为什么不用呢?这里简单分析他们的区别.Hashtable类 Hashtable继承Map接口,实现一个key-value映射的哈希表.任何非空(non-null)的对象都可作 ...
  • java基本教程之Thread中start()和run()的区别java多线程教程
    这篇文章主要介绍了Thread中start和run的区别,Thread类包含start和run方法,它们的区别是什么?下面将对此作出解答Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start() 和 run()相关源码(基 ...
  • 简单介绍Java编程中的线程池
    这篇文章主要介绍了Java编程中的线程池,进程和线程的并发是Java编程中的重要环节,需要的朋友可以参考下从 Java 5 开始,Java 提供了自己的线程池.线程池就是一个线程的容器,每次只执行额定数量的线程. java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.它很灵活,但使用起来也比较复杂,本文就对其做一个 ...
  • JAVA多线程Thread和Runnable的实现
    java中实现多线程有两种方法:一种是继承Thread类,另一种是实现Runnable接口.java中只允许单一继承,但允许实现多个接口,因此第二种方法更灵活. 代码如下:/**     * 运行继承java.lang.Thread类定义的线程     */    public void startOne() {        // 创建实例        ...
  • Java中垃圾回收器GC对吞吐量的影响测试
    这篇文章主要介绍了Java中垃圾回收器GC对吞吐量的影响测试,本文算是一个对垃圾回收器GC的优化文章,需要的朋友可以参考下在看内存管理术语表的时候偶然发现了"Pig in the Python(注:有点像中文里的贪心不足蛇吞象)"的定义,于是便有了这篇文章.表面上看,这个术语说的是GC不停地将大对象从一个分代提升到另一个分代的情景.这么做 ...
猜你喜欢