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

热门试题