首页 新闻 搜索 专区 学院

Java中runnable与thread的执行循序

0
悬赏园豆:50 [已解决问题] 解决于 2020-07-16 17:24

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)

那家伙真懒的主页 那家伙真懒 | 初学一级 | 园豆:106
提问于:2020-06-02 10:01
< >
分享
最佳答案
0

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

收获园豆:30
yytxdy | 小虾三级 |园豆:1129 | 2020-06-02 10:29
其他回答(1)
0

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

收获园豆:20
寻觅beyond | 园豆:613 (小虾三级) | 2020-06-02 10:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册