又细心的同学会发现我们在开启一个线程的时候调用的是.start()方法。而我们正在写子线程的时候调用的是run()方法。那么start()方法和run()方法又有什么区别呢?在开启一个线程时为什么只能调.start(),不能调.run()方法呢?
run() 不会产生新的栈空间,不会产生子线程 所以都是由主线程来执行 按照顺序执行完毕
start() 会产生新的栈空间, 所以由新的 子线程出现 子线程和主线程 是竞争关系 , 会互相抢占cpu资源 打印结果会有交叉
所以我们开启线程的时候必须调用star();方法
public class Test {
public static void main(String[] args) {
MyThread2 myThread2 = new MyThread2();
myThread2.run();
MyThread2 myThread22 = new MyThread2();
myThread22.run();
for (int i = 0; i < 10; i++) {
System.out.println("主线程"+i);
}
}
}
class MyThread2 extends Thread{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}