多线程中主线程与子线程的执行顺序
错误示范
//线程任务类
public class ThreadDemo implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"--"+i);
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println("主线程:"+i);
}
System.out.println("线程--------------------------------------------------");
Thread th1 = new Thread(new ThreadDemo());
Thread th = new Thread(new ThreadDemo());
th.start();
th1.start();
}
}
由于线程是从上到下执行的,主线程是一定会执行(除非程序被上面的程序死循环)。
这里就是先执行主程序,这是栈里面只有主线程一个线程,当主线程执行完毕后,加入两个子线程,这时栈内存在的是两个子线程在抢占资源。
解决方案:
把主线程放到子线程后,这时栈内有3个线程在抢占资源
正确示范
//线程任务类
public class ThreadDemo implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"--"+i);
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
Thread th1 = new Thread(new ThreadDemo());
Thread th = new Thread(new ThreadDemo());
th.start();
th1.start();
System.out.println("线程--------------------------------------------------");
for (int i = 0; i < 100; i++) {
System.out.println("主线程:"+i);
}
}
}
结论:
主线程要放在子线程们的后面,将所有线程都存在栈空间内,线程再对cpu进行抢占资源