Implement a bank line of credit account. The account will have two primary attributes, the credit limit and current credit balance. The line of credit class should also contain a lock and a sufficient credit limit condition. When initialized the current credit balance will be zero. The credit limit should be determined at construction time. The owner of the credit line can get money up to the credit limit and make payments until the balance is zero. If a request is made for money than is available, the credit limit will return up to the limit, but not beyond it. So the getMoney method should have a return value of how much money is returned.
The credit line program should have two threads: one to get more money from credit line and a second to make payments. The thread to get more money increases the credit balance up to, but not beyond the credit limit. The make payment thread decreases the current credit balance.
The make payment thread should make random payments between $0 and $500 every 2 seconds for a total of 50 payments. It should print payment made and new credit balance. The credit balance should not go below $0 so if an unneeded attempt at payment is made, it will not be accepted.
The get money thread should attempt to get more money of random amounts between $1 and $500 every 3 seconds for a total of 50 attempts to get money. It should print requested amount and amount received.
Create a tester program to run the two threads. The LineOfCredit class should have appropriate protections on increments and decrements of the credit balance.