欢迎来到易学考试网 易学考试官网
全部科目 > Java认证考试 > SCJP程序员认证考试

多项选择题

public class Transfers { 
public static void main(String[] args) throws Exception { 
Record r1 = new Record(); 
Record r2 = new Record(); 
doTransfer(r1, r2, 5); 
doTransfer(r2, r1, 2); 
doTransfer(r1, r2, 1); 
// print the result 
System.out.println(”rl = “ + r1.get() +“, r2=” + r2.get()); 
} 
private static void doTransfer( 
final Record a, final Record b, final int amount) { 
Thread t = new Thread() { 
public void run() { 
new Clerk().transfer(a, b, amount); 
} 
}; 
t.start(); 
} 
} 
class Clerk { 
public synchronized void transfer(Record a, Record b, int amount){ 
synchronized (a) { 
synchronized (b) { 
a.add(-amount); 
b.add(amount); 
} 
} 
} 
} 
class Record { 
int num=10; 
public int get() { return num; } 
public void add(int n) { num = num + n; } 
} 
If Transfers.main() is run, which three are true?()

    A. The output may be “r1 = 6, r2 = 14”.
    B. The output may be “r1 = 5, r2 = 15”.
    C. The output may be “r1 = 8, r2 = 12”.
    D. The code may run (and complete) with no output.
    E. The code may deadlock (without completing) with no output.
    F. M IllegalStateException or InterruptedException may be thrown at runtime.

点击查看答案&解析

相关考题

微信小程序免费搜题
微信扫一扫,加关注免费搜题

微信扫一扫,加关注免费搜题