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());
}
}
我们知道Thread.currentThread()方法返回的是当前正在执行的线程,所以由上面的结果可以得出:
在main中调用run()方法和调用其他普通的方法一样,此时只有主线程一个线程,此时cpu被主线程占据,是在主线程中执行,currentThread()返回的是主线程main,线程名和线程id是主线程的;而调用start()方法是开始执行一个新线程,此时cpu被该线程占据,是在该线程中执行,currentThread()返回的是该线程,所以线程名和线程id就是该线程自己的了,这也就可以解释上面的输出结果了。
我们可以观察下面的代码
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就是该线程自己的了,这也就可以解释上面的输出结果了。
相关文章推荐
- 为什么我们调用start()方法时会执行run()方法?为什么我们不能直接调用run()方法?他们之间有什么区别?
- 多线程中调用run()方法和start()方法的简单区别
- 调用 start() 方法与调用 run() 方法的区别
- Thread类调用run()方法和调用start()方法的区别
- 复习线程----调用run()方法和调用start()方法的区别
- Thread直接调用run()和start()方法的区别
- Thread中调用start()和run()方法的区别
- 调用start()方法和直接调用run()方法的区别
- Thread调用run()和start()方法的区别
- 调用start()方法和直接调用run()方法的区别
- 牛客网Java刷题知识点之调用线程类的start()方法和run()方法的区别
- run()方法与start()的区别?
- Java中start和run方法的区别
- 多线程:创建Thread为什么要调用start启动,而不能直接调用run方法
- 关于子线程的交互,线程的run方法与start方法的区别
- Java -- Thread中start和run方法的区别
- 线程中的 start()和run()方法的区别
- Java线程中run和start方法的区别
- Thread线程中start()和run()方法的区别
- java 中两种多线程的区别,start方法和run方法的启动区别