Java concurrency tanulóprojekt, amely egy közös bankszámlán végzett párhuzamos műveleteken keresztül mutatja be a különböző szálkezelési stratégiák viselkedését és teljesítményét — beleértve a valódi blokkoló HTTP I/O hatását.
- Java 21
- Spring Boot 4.0.4 (parancssori alkalmazás, nincs web szerver)
- Java
HttpClient(blokkoló HTTP hívások)
A projekt Clean Architecture elveket követ:
domain/ – BankAccount, BankOperation, FamilyMember (üzleti logika)
application/ – use case-ek, port interfészek (OperationSource, SimulationRunner, OperationReporter)
infrastructure/ – runner implementációk, HTTP reporter, generátorok
config/ – SimulationProperties (@ConfigurationProperties)
Minden futáskor:
- Egy közös
BankAccountjön létre (szinkronizált shared resource) - A family memberek párhuzamosan végeznek deposit/withdraw műveleteket
- Minden művelet után a rendszer HTTP POST-ot küld egy külső endpointra (
httpbin.org/post) — ez a blokkoló I/O pont - A futás végén benchmark eredmény és egyenleg-konzisztencia ellenőrzés történik
| Runner | Leírás |
|---|---|
plain |
Minden family membernek saját platform szál, Thread.join() várakozás |
fixed |
Fix méretű thread pool, ExecutorService.invokeAll() |
virtual |
Feladatonként egy virtuális szál (Java 21), newVirtualThreadPerTaskExecutor() |
A virtuális szálak előnye a blokkoló HTTP hívások esetén mutatkozna meg: amíg egy virtuális szál a hálózati választ várja, a carrier thread más feladatot végezhet. A teszt során nem mutatott jobb teljesítményt a fix méretű poollal szemben.
A szimuláció szándékosan két szinkronizált közös erőforrást tartalmaz:
BankAccount–synchronizeddeposit/withdraw/getBalance műveletekRandomOperationGenerator–synchronizednextOperation, közösRandompéldánnyal
application.properties vagy parancssori argumentumok:
simulation.member-count=5
simulation.operations-per-member=1000
simulation.initial-balance=10000
simulation.min-amount=100
simulation.max-amount=5000
simulation.runner-type=plain # plain | fixed | virtual
simulation.pool-size=10 # csak fixed runner esetén releváns
simulation.operation-source-type=random./mvnw spring-boot:run \
-Dspring-boot.run.arguments="
--simulation.runner-type=virtual
--simulation.member-count=50
--simulation.operations-per-member=100"=== Benchmark result ===
Runner type: virtual
Member count: 50
Operations per member: 100
Total operations: 5000
Elapsed time (ms): 23202
Operations per second: 215,49
Consistent: true
=== Simulation result ===
Initial balance: 10000
Final balance: 49446
Total deposited amount: ...
Total withdrawn amount: ...
A Consistent: true azt jelenti, hogy a záró egyenleg megfelel a várható értéknek — a szinkronizáció helyes.
Member count: 50 Operations per member: 100 Total operations: 5000