一道线程的题目,头痛。。。
class NameList {
private List names = new ArrayList();
public synchronized void add(String name) { names.add(name); }
public synchronized void printAll() {
for (int i = 0; i <names.size(); i++) {
System.out.print(names.get(i) + " ");
}
}
public static void main(String[] args) {
final NameList sl = new NameList();
for(int i=0;i <2;i++) {
new Thread() {
public void run() {
sl.add( "A ");
sl.add( "B ");
sl.add( "C ");
sl.printAll();
}
}.start();
}
}
}
Which two statements are true if this class is compiled and run?
(Choose two.)
A. An exception may be thrown at runtime.
B. The code may run with no output, without exiting.
C. The code may run with no output, exiting normally.
D. The code may rum with output “A B A B C C “, then exit.
E. The code may rum with output “A B C A B C A B C “, then exit.
F. The code may ruin with output “A A A B C A B C C “, then exit.
G. The code may ruin with output “A B C A A B C A B C “, then exit.
答案EG
------解决方案--------------------这样来的 names list里面的数据是这样的
线程0执行ADD
A B C ===> 线程1执行ADD(A)
name 变为 A B C A ===> 线程0执行打印 A B C A ====> 线程1完成插入 =====> 再打印
A B C A | A B C A B C
竖线是两个线程打印的内容
------解决方案--------------------