您的位置:首页 > 大数据 > 人工智能

main方法中调用run()和start()的区别

2018-02-01 17:18 375 查看
我们知道java中创建线程其中的一种方法是继承Thread类,然后重写run()方法,再在主方法中调用start()执行线程 。那么我们在main中直接调用run()方法和调用start()方法的区别是什么?

我们可以观察下面的代码

public class Student1 extends Thread {
@Override
public void run(){
System.out.println("线程名:"+Thread.currentThread().getName()+"--线程id:"+Thread.currentThread().getId());
}
}
public class Student2 extends Thread {
@Override
public void run(){
System.out.println("线程名:"+Thread.currentThread().getName()+"--线程id:"+Thread.currentThread().getId());
}
}
public class ReadMain {
public static void main(String[] args){
Student1 s1 = new Student1();
s1.setName("线程1"); //为线程命名

Student2 s2 = new Student2();
s2.setName("线程2"); //为线程命名
System.out.println("主线程名:"+Thread.currentThread().getName()+"--线程id:"+Thread.currentThread().getId());
s1.start();
s1.run();
s2.start();
s2.run();
}
}
我们查看输出结果



我们知道Thread.currentThread()方法返回的是当前正在执行的线程,所以由上面的结果可以得出:

在main中调用run()方法和调用其他普通的方法一样,此时只有主线程一个线程,此时cpu被主线程占据,是在主线程中执行,currentThread()返回的是主线程main,线程名和线程id是主线程的;而调用start()方法是开始执行一个新线程,此时cpu被该线程占据,是在该线程中执行,currentThread()返回的是该线程,所以线程名和线程id就是该线程自己的了,这也就可以解释上面的输出结果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: