Java中runnable与thread的执行循序

2020-07-16 16:47发布


public class thread {
    public static void main(String[] args) {
        thread1 threadA = new thread1();
        thread2 threadB = new thread2();
        threadB.start();
        threadA.run();
        for (int i = 10; i > 0; i--) {
            System.out.println(Thread.currentThread()+"线程C执行情况:" + i);
        }
    }
}

class thread1 implements Runnable {
    @Override
    public void run() {
        for (int i = 10; i > 0; i--) {
            System.out.println(Thread.currentThread()+"线程A执行情况:" + i);
        }
    }
}

class thread2 extends Thread {
    @Override
    public void run() {
        for (int i = 10; i > 0; i--) {
            System.out.println(Thread.currentThread()+"线程B执行情况:" + i);
        }
    }
}
运行结果如下,线程的执行循序为何是ACB。
![](https://img2020.cnblogs.com/q/1304646/202006/1304646-20200602100001714-2130208996.jpg)

标签: java 线程
2条回答
【Aperson】
2楼-- · 2020-07-16 17:21

启动线程是调用Thread类的start方法,调用run方法并不会启动线程,而是像调用普通方法一样。

查看更多
成全新的幸福
3楼-- · 2020-07-16 17:27

因为A调用的是run()方法,所以实际上是没有启动线程的,A和C是顺序的,必然是A先打印完再打印C,但是B是一个新的线程调用,结果是不确定的,你现在显示ACB,多跑几次或者i设置大一点就不一定了,只能保证A在C前,B的打印顺序是不确定的

查看更多
登录 后发表回答