多线程Thread,Run()/Start() 运行的区别
下面是继承了Thread类的线程
当一个类同时有子线程和主线程的时候,那么两条线程是一起运行的,
先后顺序由CPU进行调度,还是下面的代码:测试直接使用run(),start();
public class ThreadTest1 extends Thread{
/**
* 线程 Thread类
* Thread 实现了 Runnable接口
*
* 这里是线程体
*/
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("线程体:"+i);
}
}
/**
* 主线程
* @param args
*/
public static void main(String[] args) {
ThreadTest1 threadTest1 = new ThreadTest1();
threadTest1.start();
for (int i = 0; i < 20; i++) {
System.out.println("主线程:"+i);
}
}
}
使用run() 运行:
Run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
使用run方法直接运行的时候,测试了10次,没有都是先运行run()方法内部的程序,在运行Main()方法内的程序,
run方法可以创建一个线程,但是相当于同步的方式,没有多线程的存在。
使用run方法总结: 和我们之前的程序一样,直接从上而下运行。当run() 方法结束后在运行主线程中的程序。
使用Start() 方法运行:
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
主线程:14 主线程:15 主线程:16 主线程:17 主线程:18 主线程:19 线程体:2 线程体:3 线程体:4 线程体:5 线程体:6 线程体:7 线程体:8 线程体:9 线程体:10
使用Start() 运行程序的时候,发现结果会出现交替运行。
只有调用start方法才是交给jvm管理,才是多线程。