Java中Thread.start()和Thread.run()之间的区别
Java中的start()方法
线程类的start()方法可以用来启动线程;该方法会在内部调用Runnable接口的run()方法,以在单独的线程中执行run()方法中指定的代码。【视频教程推荐:Java教程】
start()方法启动线程执行以下任务:
● 它统计了一个新线程
● 线程从New State移动到Runnable状态。
● 当线程有机会执行时,它的目标run()方法将运行。
Java中的run()方法
线程类的run()方法是Runnable接口的一个抽象方法,由java虚拟机直接调用的,不会创建的新线程。
start()方法和run()方法的区别
1、方法的定义
start()方法在java.lang.Thread类中定义;而,run()方法在java.lang.Runnable接口中定义,必须在实现类中重写。
2、新线程创建
当程序调用start()方法时,会创建一个新线程,然后执行run()方法。但是如果我们直接调用run()方法,则不会创建新的线程,run()方法将作为当前调用线程本身的常规方法调用执行,并且不会发生多线程。
示例:
class MyThread extends Thread { public void run() { System.out.println("\n"); System.out.println("当前线程的名称: " + Thread.currentThread().getName()); System.out.println("run()方法调用"); } } class demo { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); } }
输出:
正如我们在上面的例子中所看到的,当我们调用线程类实例的start()方法时,会创建一个新的线程,默认名称为Thread-0,然后调用run()方法,并在其中执行所有内容。新创建的线程。
现在,让我们尝试直接调用run()方法而不是start()方法:
class MyThread extends Thread { public void run() { System.out.println("\n"); System.out.println("当前线程的名称: " + Thread.currentThread().getName()); System.out.println("run()方法调用"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.run(); } }
输出:
正如我们在上面的例子中所看到的,当我们调用MyThread类的run()方法时,没有创建新线程,并且在当前线程即主线程上执行run()方法。因此,没有发生多线程。run()方法是作为正常函数被调用。
3、多次调用
start()方法不能多次调用,否则抛出java.lang.IllegalStateException;而,run()方法可以进行多次调用,因为它只是一种正常的方法调用。
以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注相关教程栏目!!!
以上就是Java中Thread.start()和Thread.run()之间的区别的详细内容,更多请关注其它相关文章!
上一篇: 什么是设计模式
推荐阅读
-
java中String和StringBuffer的区别
-
Java中HashMap和TreeMap的区别深入理解
-
浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别
-
解析iptables中SNAT和MASQUERADE之间的区别
-
Java中parseInt()和valueOf(),toString()的区别
-
Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
-
java中的sleep()和wait()的区别
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
java中的值传递和引用传递有什么区别呀?
-
故事形式讲解javaScript中创建对象和Java创建对象的区别