kom*_*nan 3 java string multithreading
问题来自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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
选项A)好B)好主意C)好主意好主意正确答案是:A
解释:在String的情况下,本地方法中的更改值不会在全局中更改(因为String对象是不可变的).
没有一个答案是正确的,也没有一个正确的答案.
问题非常糟糕,因为它混合了两个完全不同的问题:
sName参数nameTest()隐藏了同名的静态变量,对局部变量的更改无效.nameTest()开始这改变其静态变量线程run()的方法,而main()方法打印变量,而无需等待该线程完成.这被称为竞争条件:将打印变量的状态几乎是巧合 - 以下任何一种情况都是可能的: