|
1 | 1 | import org.junit.Test;
|
2 | 2 |
|
| 3 | +import java.util.Map; |
3 | 4 | import java.util.concurrent.locks.ReadWriteLock;
|
4 | 5 | import java.util.concurrent.locks.ReentrantReadWriteLock;
|
5 |
| -import java.util.function.Function; |
6 |
| -import java.util.stream.Collectors; |
7 |
| -import java.util.stream.Stream; |
8 | 6 |
|
9 | 7 | import static org.hamcrest.CoreMatchers.is;
|
10 | 8 | import static org.hamcrest.MatcherAssert.assertThat;
|
|
14 | 12 | */
|
15 | 13 | public class UserMapConcurrencyTest {
|
16 | 14 |
|
17 |
| - @Test |
18 |
| - public void transfer() { |
19 |
| - var userMap = Stream.of(new User(1, 40), new User(2, 33)) |
20 |
| - .collect(Collectors.toMap(User::getId, Function.identity())); |
| 15 | + private Map<Integer, User> userMap = Map.of(1, new User(1, 40), |
| 16 | + 2, new User(2, 33)); |
21 | 17 |
|
| 18 | + @Test |
| 19 | + public void write_transfer() { |
22 | 20 | ReadWriteLock lock = new ReentrantReadWriteLock();
|
23 | 21 | LockExecutor executor = new LockExecutor(lock);
|
24 | 22 |
|
25 |
| - executor.write(() -> { |
| 23 | + var transferred = executor.write(() -> { |
26 | 24 | var transfer = PositiveInt.of(15);
|
27 |
| - userMap.replace(1, userMap.get(1).outcome(transfer)); |
28 |
| - userMap.replace(2, userMap.get(2).income(transfer)); |
| 25 | + return Map.of(1, userMap.get(1).outcome(transfer), |
| 26 | + 2, userMap.get(2).income(transfer)); |
29 | 27 | });
|
30 | 28 |
|
31 |
| - assertThat(userMap.get(1).getBalance(), is(25)); |
32 |
| - assertThat(userMap.get(2).getBalance(), is(48)); |
| 29 | + assertThat(transferred.get(1).getBalance(), is(25)); |
| 30 | + assertThat(transferred.get(2).getBalance(), is(48)); |
33 | 31 | }
|
34 | 32 |
|
35 | 33 | @Test
|
36 |
| - public void read() { |
37 |
| - var userMap = Stream.of(new User(1, 40), new User(2, 33)) |
38 |
| - .collect(Collectors.toMap(User::getId, Function.identity())); |
39 |
| - |
| 34 | + public void read_sum_balance() { |
40 | 35 | ReadWriteLock lock = new ReentrantReadWriteLock();
|
41 | 36 | LockExecutor executor = new LockExecutor(lock);
|
42 | 37 |
|
43 |
| - var balanceAll = executor.read(() -> userMap.values().stream().map(User::getBalance).mapToInt(x -> x).sum()); |
| 38 | + var balanceAll = executor.read(() -> userMap.values() |
| 39 | + .stream() |
| 40 | + .map(User::getBalance) |
| 41 | + .mapToInt(x -> x) |
| 42 | + .sum()); |
44 | 43 |
|
45 | 44 | assertThat(balanceAll, is(73));
|
46 | 45 | }
|
|
0 commit comments