JAVA——线程中start()和run()的区别

来源:互联网 发布:mysql synonym 编辑:程序博客网 时间:2024/06/05 15:26

区别

  • start()方法是令开启一个线程执行该线程。
  • run()方法是在主函数中直接调用该线程类的run方法,不是通常意义上的多线程。

run方法相当于调用了该类的普通方法。start会执行完整的线程周期。

示例

继承Thread类实现

run方法代码如下。

public class Test1 {  public static void main(String[] arg0) {    MyThread thread1 = new MyThread();    MyThread2 thread2 = new MyThread2();    thread1.run();    thread2.run();  }}class MyThread extends Thread {  @Override  public void run() {    for (int i = 0; i < 20; i++) {      System.out.println("子程序1");    }  }}class MyThread2 extends Thread {  @Override  public void run() {    for (int i = 0; i < 20; i++) {      System.out.println("子程序2");    }  }}

执行结果如下。
run方法执行结果图

将线程运行方法改至srart(),代码如下。

public static void main(String[] arg0) {    MyThread thread1 = new MyThread();    MyThread2 thread2 = new MyThread2();    thread1.**start**();    thread2.**start**();  }

执行结果如下。
线程start()方法


实现Runnable接口

实现了Runnable的类不能直接调用start()方法,需要使用Thread的构造方法,如下代码5、6行所示。

public class Test1 {  public static void main(String[] arg0) {    MyThread thread1 = new MyThread();    MyThread2 thread2 = new MyThread2();    Thread thread3 = new Thread(thread1);    Thread thread4 = new Thread(thread2);    thread3.start();    thread4.start();  }}class MyThread implements Runnable {  @Override  public void run() {    for (int i = 0; i < 20; i++) {      System.out.println("子程序1");    }  }}class MyThread2 implements Runnable {  @Override  public void run() {    for (int i = 0; i < 20; i++) {      System.out.println("子程序2");    }  }}

执行结果同上面的继承Thread中的start方法。

原创粉丝点击