Java中Thread.start()和Thread.run()的区别。
众所周知,start()和run()是多线程的两个重要方法,一个用于创建新线程,另一个用于启动该线程的执行。
以下是Thread.start()和Thread.run()之间的一些重要区别。
序号 | 关键点 | start() | run() |
---|---|---|---|
1 | 实现 | 线程类的start()方法的实现是:当它被调用时,会创建一个新线程,并在该新线程中执行run()方法内的代码。 | 而如果直接执行run()方法,则不会创建新线程,run()方法内的代码将在当前线程中执行,不会发生多线程。 |
2 | 定义 | start()方法定义在Thread类中,其包为java.lang。 | run()方法是Runnable接口的方法,也定义在java.lang包中。 |
3 | 调用 | start()方法不能在同一个对象上调用多次,否则会抛出java.lang.IllegalThreadStateException异常。 | 另一方面,run()方法如果被多次调用不会抛出任何类型的异常。因此,run()方法可以多次调用。 |
4 | 线程数量 | 如前所述,调用start()方法时,除了当前线程外还会创建一个新线程,因此至少存在两个线程,从而引入了多线程。 | 另一方面,直接调用run()方法不会创建新线程,任务将在相同的当前线程上执行,因此只有一个线程,不会引入多线程。 |
5 | 调用方式 | 由于Thread类实现了Runnable接口,因此它也实现了run()方法,start()方法在创建新线程后内部调用run()方法。 | 另一方面,如果我们实现Runnable接口并调用run()方法,则run()方法由start()方法执行或直接调用。 |
Thread.start() vs Thread.run() 示例
JavaTester.java
public class JavaTester extends Thread{ public void run(){ System.out.println("Thread is running..."); } public static void main(String args[]){ JavaTester t1=new JavaTester(); // this will call run() method t1.start(); } }
输出
Thread is running...
示例
JavaTester.java
public class JavaTester implements Runnable{ public void run(){ System.out.println("Thread is running..."); } public static void main(String args[]){ JavaTester m1=new JavaTester(); Thread t1 =new Thread(m1); // this will call run() method t1.start(); } }
输出
Thread is running...
广告