Thread类调用run()方法和调用start()方法的区别

  Thread类自述

        小C和字符串类String类在java大街上闲逛,迎面遇到了Thread类。String介绍说:“小C,这就是大名鼎鼎的Thread类,线程类,java可以在语言级上支持多线程这位Thread功不可没啊。”小C说:“你好啊,我记得你有一个很让我疑惑的地方,当我自己写一个类继承你的时候,我必须要重写你的run()方法,在run()方法里写上我需要完成的任务,但是要调用的时候去不是调用run()方法,却是调用start()方法,为什么不能调用run()方法呢?”

       Thread类大笑:“哈哈,你有没有试过直接调用我的run(),方法啊?”

        小C:“没有,上课时,老师可是重点强调了,调用的是start()方法而不是run()方法。咦,要是直接调用你的run()方法会怎么样,会出错吗?”

        Thread类:“那就让我们现场试一下吧。”

       public class ThreadTest {
public static void main(String[] args){
Thread thread = new Thread1();  
thread.start();
for(int i=0 ; i<=60 ; i++)
System.out.println("main thread "+i);
}
}


class Thread1 extends Thread {
public void run() {
for(int i=0 ; i<=60 ; i++)
System.out.println("thread1 "+i);
}
}

其运行结果如下:

main thread 0
main thread 1
main thread 2
main thread 3
main thread 4
main thread 5
main thread 6
main thread 7
main thread 8
main thread 9
main thread 10
main thread 11
main thread 12
main thread 13
main thread 14
main thread 15
main thread 16
main thread 17
main thread 18
main thread 19
main thread 20
main thread 21
main thread 22
main thread 23
thread1 0
thread1 1
thread1 2
thread1 3
thread1 4
thread1 5
thread1 6
thread1 7
thread1 8
thread1 9
thread1 10
thread1 11
thread1 12
thread1 13
thread1 14
thread1 15
thread1 16
thread1 17
thread1 18
thread1 19
thread1 20
thread1 21
thread1 22
thread1 23
thread1 24
thread1 25
thread1 26
thread1 27
thread1 28
thread1 29
thread1 30
thread1 31
thread1 32
thread1 33
thread1 34
thread1 35
thread1 36
thread1 37
thread1 38
thread1 39
thread1 40
thread1 41
thread1 42
thread1 43
thread1 44
thread1 45
thread1 46
thread1 47
thread1 48
thread1 49
thread1 50
thread1 51
thread1 52
thread1 53
thread1 54
thread1 55
thread1 56
thread1 57
thread1 58
thread1 59
thread1 60
main thread 24
main thread 25
main thread 26
main thread 27
main thread 28
main thread 29
main thread 30
main thread 31
main thread 32
main thread 33
main thread 34
main thread 35
main thread 36
main thread 37
main thread 38
main thread 39
main thread 40
main thread 41
main thread 42
main thread 43
main thread 44
main thread 45
main thread 46
main thread 47
main thread 48
main thread 49
main thread 50
main thread 51
main thread 52
main thread 53
main thread 54
main thread 55
main thread 56
main thread 57
main thread 58
main thread 59
main thread 60

Thread类:“你可以看到当调用的是start()方法时,主进程和thread1进程是交替进行的,这符合我们的意图,但是当我们把thread.start()改成thread.run()时,程序运行结果如下。

thread1 0
thread1 1
thread1 2
thread1 3
thread1 4
thread1 5
thread1 6
thread1 7
thread1 8
thread1 9
thread1 10
thread1 11
thread1 12
thread1 13
thread1 14
thread1 15
thread1 16
thread1 17
thread1 18
thread1 19
thread1 20
thread1 21
thread1 22
thread1 23
thread1 24
thread1 25
thread1 26
thread1 27
thread1 28
thread1 29
thread1 30
thread1 31
thread1 32
thread1 33
thread1 34
thread1 35
thread1 36
thread1 37
thread1 38
thread1 39
thread1 40
thread1 41
thread1 42
thread1 43
thread1 44
thread1 45
thread1 46
thread1 47
thread1 48
thread1 49
thread1 50
thread1 51
thread1 52
thread1 53
thread1 54
thread1 55
thread1 56
thread1 57
thread1 58
thread1 59
thread1 60
main thread 0
main thread 1
main thread 2
main thread 3
main thread 4
main thread 5
main thread 6
main thread 7
main thread 8
main thread 9
main thread 10
main thread 11
main thread 12
main thread 13
main thread 14
main thread 15
main thread 16
main thread 17
main thread 18
main thread 19
main thread 20
main thread 21
main thread 22
main thread 23
main thread 24
main thread 25
main thread 26
main thread 27
main thread 28
main thread 29
main thread 30
main thread 31
main thread 32
main thread 33
main thread 34
main thread 35
main thread 36
main thread 37
main thread 38
main thread 39
main thread 40
main thread 41
main thread 42
main thread 43
main thread 44
main thread 45
main thread 46
main thread 47
main thread 48
main thread 49
main thread 50
main thread 51
main thread 52
main thread 53
main thread 54
main thread 55
main thread 56
main thread 57
main thread 58
main thread 59
main thread 60

        Thread类:“你看,这样程序是先把thread的run()方法全运行完之后才运行下面的语句,也就是说当写成run()时,就相当于普通的函数调用,并不会产生新的进程,只有调用start()时,才是告诉操作系统产生一个新的进程。”

        小C点点头,若有所悟。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值