Multi Threading
© examsiri.com
Question : 27 of 44
Marks:
+1,
-0
1. public class Transfers {
2. public static void main(String[] args) throws Exception {
3. Record r1 = new Record();
4. Record r2 = new Record();
5. doTransfer(r1, r2, 5);
6. doTransfer(r2, r1, 2);
7. doTransfer(r1, r2, 1);
8. /*print the result*/
9. System.out.println("rl = " + r1.get() +", r2=" + r2.get());
10. }
11. private static void doTransfer(
12. final Record a, final Record b, final int amount) {
13. Thread t = new Thread() {
14. public void run() {
15. new Clerk().transfer(a, b, amount);
16. }
17. };
18. t.start();
19. }
20. }
21. class Clerk {
22. public synchronized void transfer(Record a, Record b, int amount){
23. synchronized (a) {
24. synchronized (b) {
25. a.add(-amount);
26. b.add(amount);
27. }
28. }
29. }
30. }
31. class Record {
32. int num=10;
33. public int get() { return num; }
34. public void add(int n) { num = num + n; }
35. }If Transfers.main() is run, which three are true? (Choose three.)
Go to Question: