|
| 1 | +# Bank Account |
| 2 | + |
| 3 | +Simulate a bank account supporting opening/closing, withdrawals, and deposits |
| 4 | +of money. Watch out for concurrent transactions! |
| 5 | + |
| 6 | +A bank account can be accessed in multiple ways. Clients can make |
| 7 | +deposits and withdrawals using the internet, mobile phones, etc. Shops |
| 8 | +can charge against the account. |
| 9 | + |
| 10 | +Create an account that can be accessed from multiple threads/processes |
| 11 | +(terminology depends on your programming language). |
| 12 | + |
| 13 | +It should be possible to close an account; operations against a closed |
| 14 | +account must fail. |
| 15 | + |
| 16 | +## Instructions |
| 17 | + |
| 18 | +Run the test file, and fix each of the errors in turn. When you get the |
| 19 | +first test to pass, go to the first pending or skipped test, and make |
| 20 | +that pass as well. When all of the tests are passing, feel free to |
| 21 | +submit. |
| 22 | + |
| 23 | +Remember that passing code is just the first step. The goal is to work |
| 24 | +towards a solution that is as readable and expressive as you can make |
| 25 | +it. |
| 26 | + |
| 27 | +Have fun! |
| 28 | + |
| 29 | +This exercise introduces [concurrency](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html). |
| 30 | +To pass the last test you might find the |
| 31 | +[`synchronized` keyword or locks](https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html) useful. |
| 32 | + |
| 33 | +Problems arising from running code concurrently are often intermittent because they depend on the order the code is |
| 34 | +executed. Therefore the last test runs many [threads](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html) |
| 35 | +several times to increase the chances of catching a bug. That means this test should fail if your implementation is not |
| 36 | +[thread safe](https://en.wikipedia.org/wiki/Thread_safety), but there is a chance it will pass just because there was |
| 37 | +no concurrent modification attempt. It is unlikely that this will occur several times |
| 38 | +in a row since the order the code is executed should vary every time you run the test. So if you run the last test a |
| 39 | +couple of times and it passes every time then you can be reasonably sure that your implementation is correct. |
| 40 | + |
| 41 | + |
| 42 | +To run the tests: |
| 43 | + |
| 44 | +```sh |
| 45 | +$ gradle test |
| 46 | +``` |
| 47 | + |
| 48 | +For more detailed info about the Java track see the [help page](http://exercism.io/languages/java). |
| 49 | + |
| 50 | + |
| 51 | + |
| 52 | +## Submitting Incomplete Solutions |
| 53 | +It's possible to submit an incomplete solution so you can see how others have completed the exercise. |
| 54 | + |
0 commit comments