说明:
继承了Thread类并改写run方法就相当于创建了一个子线程方法
示例:
public class test1 extends Thread { @Override public void run(){ //run方法体 for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } } }
通过start方法调用子线程方法,通过子线程运行:运行结果就是主线程的和子线程的结果交替出现,即两个线程都在执行,至于那个具体执行那个是系统调度
public class test1 extends Thread { @Override public void run(){ //run方法体 for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } } public static void main(String[] args){ test1 testThead = new test1(); // 实例化 testThead.start(); // 调用子线程方法run //主线程的方法体 for (int i = 0; i < 200; i++){ System.out.println("main执行"+i); } } }
如果不用start方法,而是直接换成run,即testThead.run();
,就相当于没有启动子线程,而是直接调用run方法,那就按顺序先执行run再执行主线程的方法体。start就相当于告诉系统,start的方法要在子线程中执行。如果有几个start启动的子线程,这些子线程的运行顺序是同样是不固定的。
public class test2 implements Runnable{ @Override public void run(){ //run方法体 for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } }
public class test2 implements Runnable{ @Override public void run(){ for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } } public static void main(String[] args){ test2 testThead = new test2(); // 先实例化接口类 Thread t1 = new Thread(testThead); // 再实例化Thread类并将接口类作为参数 t1.start(); // 通过Thread类start // 上面两行可以简写成new Thread(testThead).start() //主线程 for (int i = 0; i < 200; i++){ System.out.println("main执行"+i); } } }