加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Thread,它的答案是什么?

发布时间:2020-12-15 05:05:09 所属栏目:Java 来源:网络整理
导读:问题是从 http://www.javacertifications.net/javacert/scjp1.6Mock.jsp开始 问题没有-20 以下代码的输出是什么? public class Test extends Thread{ static String sName = "good"; public static void main(String argv[]) { Test t = new Test(); t.name
问题是从 http://www.javacertifications.net/javacert/scjp1.6Mock.jsp开始

问题没有-20

以下代码的输出是什么?

public class Test extends Thread
{   
    static String sName = "good";
    public static void main(String argv[])
    {
        Test t = new Test();
        t.nameTest(sName);
        System.out.println(sName);    
    }
    public void nameTest(String sName)
    {
        sName = sName + " idea ";
        start();
    }
    public void run()
    {
        for(int i=0;i  <  4; i++)
        {
            sName = sName + " " + i;

        }
    }
}

选项
????一个好的
????B)好主意
????C)好主意好主意
????正确的答案是:A

解释:在String的情况下,本地方法中的更改值不会在全局中更改(因为String对象是不可变的).

解决方法

没有一个答案是正确的,也没有一个正确的答案.

问题非常糟糕,因为它混合了两个完全不同的问题:

> nameTest()方法的sName参数隐藏了同名的静态变量,对局部变量的更改无效.
> nameTest()启动一个线程,该线程在其run()方法中更改静态变量,而main()方法打印变量而不等待该线程完成.这被称为竞争条件:将打印变量的状态几乎是巧合 – 以下任何一种情况都是可能的:

>好>好0>好0 1>好0 1 2>好0 1 2 3

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读