线程是否立刻运行?

你觉得下面的程序输出的是10个"No"吗?

public class MyThread implements Runnable { 
    String myString = "Yes ";

    public void run() { 
        this.myString = "No "; 
    }

    public static void main(String[] args) { 
        MyThread t = new MyThread(); 
        new Thread(t).start();

        for (int i=0; i < 10; i++) 
            System.out.print(t.myString); 
    }
}

      首先可以肯定地讲, 结果是不可预知的, 也就是说并不能肯定输出的是多少个"No"或者是否还包括有"Yes".

      当在程序的这一行"new Thread(t).start()"执行完后, 如果此时的线程立刻被执行了并且没有任何耽搁, 那么结果肯定是10个"No", 但start方法并不是调用什么线程的run方法来强制执行线程, 而是start方法只简单地发出一个通知, 告知操作系统和其它的正在执行中的线程, 说"我这个线程此时属于可执行状态", 并且在线程队列里轮到此线程执行时, 这时此线程才得以执行. 所以说在这些繁琐的步骤里另一方面主程序线程可能早已经到了for循环处, 但此时可能执行的start方法的那个线程还没有得到执行, 这样输出就可能是几个"Yes"再加几个"No", 其二者的个数也是无法得知的(但有一点可以肯定, "Yes"和"No"加起来的总数肯定是10个), 因为谁也不能预知被通知的线程会在什么被执行起来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值