Thread中start方法 和 run方法 的区别
1.使用 start
方法启动线程的时候,JVM虚拟机会在内存中给线程分配一个独立的内存空间,有自己的局部变量等
代码示例
public class ThreadDemo extends Thread{
String s;
@Override
public void run() {
for (int i = 0;i<5;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-----" + "线程运行。。。" + this.s);
}
}
public ThreadDemo(String s){
this.s = s;
System.out.println("初始化方法" + "----" + s);
}
public static void main(String[] args){
ThreadDemo a = new ThreadDemo("a");
ThreadDemo b = new ThreadDemo("b");
a.start();
b.start();
}
}
结果
初始化方法----a
初始化方法----b
Thread-0-----线程运行。。。a
Thread-1-----线程运行。。。b
Thread-0-----线程运行。。。a
Thread-1-----线程运行。。。b
Thread-1-----线程运行。。。b
Thread-0-----线程运行。。。a
Thread-0-----线程运行。。。a
Thread-1-----线程运行。。。b
Thread-0-----线程运行。。。a
Thread-1-----线程运行。。。b
- 使用
run
方法启动线程的时候,就是使用主线程运行,会按照顺序进行调度方法,不会出现抢占资源的情况
代码示例
public class ThreadDemo extends Thread{
String s;
@Override
public void run() {
for (int i = 0;i<5;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-----" + "线程运行。。。" + this.s);
}
}
public ThreadDemo(String s){
this.s = s;
System.out.println("初始化方法" + "----" + s);
}
public static void main(String[] args){
ThreadDemo a = new ThreadDemo("a");
ThreadDemo b = new ThreadDemo("b");
a.run();
b.run();
}
}
输出结果
初始化方法----a
初始化方法----b
main-----线程运行。。。a
main-----线程运行。。。a
main-----线程运行。。。a
main-----线程运行。。。a
main-----线程运行。。。a
main-----线程运行。。。b
main-----线程运行。。。b
main-----线程运行。。。b
main-----线程运行。。。b
main-----线程运行。。。b