码迷,mamicode.com
首页 > 编程语言 > 详细

线程start() 和run()的区别

时间:2014-05-24 12:33:35      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:class   blog   c   code   java   tar   

一个面试题引发的思考:

一个线程上直接调用了run()方法结果如何?我当时想的是抱方法找不到错误,今天测试了一下我错了!找了点资料学习了下,加上自己的理解整理如下(望指点)。

(1)调用start:

调用start()启动一个线程,该线程进入就绪状态,等待cpu分配执行时间,一旦得到执行时间就执行

run()线程体。无需等待该线程执行完毕再执行其他线程,真正实现多线程,cpu不会因为某个线程需要等待资源而进入空闲状态,cpu会被分配给其他线程执行。

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test extends Thread{
     
    public static void main(String[] args) {   
        new Test(){
            @Override
            public void run() {
                for(int i=0;i<1000;i++){
                    System.out.println(i);
                }
            }
        }.start();
        System.out.println("多线程");
    }
     
}

  执行结果:

0
1
2
3
4
5
6
7
8
9
10
11
多线程
12
13
14
15
16

...

多线程的位置不固定:有可能出现在打印数字之前,也有可能出现在数字中间。我想这是因为要看main线程和Test()线程谁先分配到cpu资源吧。

(2)调用run():

run() 就是一个普通的方法,完全可以直接调用,如果直接调用的话,程序只有main线程,程序执行路径也只有一条,还是顺序执行,run()执行完了才能执行其他的,这样就失去了线程的意义。

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test extends Thread{
     
    public static void main(String[] args) {   
        new Test(){
            @Override
            public void run() {
                for(int i=0;i<1000;i++){
                    System.out.println(i);
                }
            }
        }.run();
        System.out.println("多线程");
    }
     
}

  执行结果:

...

993
994
995
996
997
998
999
多线程

执行结果永远都是这样。

线程start() 和run()的区别,布布扣,bubuko.com

线程start() 和run()的区别

标签:class   blog   c   code   java   tar   

原文地址:http://www.cnblogs.com/tmj-sh/p/3748134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!