java中thread线程start和run的区别
程序员文章站
2024-02-26 09:27:04
最近看到一个题目,代码如下:
复制代码 代码如下:public static void main(string args[]) {thread t = new threa...
最近看到一个题目,代码如下:
复制代码 代码如下:
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())来调用,感觉很不方便。
上一篇: c#判断网络连接状态
下一篇: Winform 显示Gif图片的实例代码
推荐阅读
-
java中thread线程start和run的区别
-
浅谈Java中static和非static的区别
-
Java中弱引用和软引用的区别以及虚引用和强引用介绍
-
Java中Object.equals和String.equals的区别详解
-
Java中HashTable和HashMap的区别_动力节点Java学院整理
-
Java中HashSet和HashMap的区别_动力节点Java学院整理
-
java 中 System.out.println()和System.out.write()的区别
-
详解Java中Thread 和Runnable区别
-
java中Class.getMethods()和Class.getDeclaredMethods()方法的区别
-
java中timer的schedule和scheduleAtFixedRate方法区别详解