试题详情
- 多项选择题 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.
- A,B,E
关注下方微信公众号,在线模考后查看
热门试题