contoh implementasi konsep thread, race condition, deadlock, dan synchronization dalam konteks aplikasi kredit atau keuangan:
Studi Kasus: Simulasi Transaksi Bank
Skenario
- Ada dua akun bank dengan saldo masing-masing.
- Beberapa thread mewakili transaksi simultan seperti transfer antar akun.
- Tujuan: Menghindari masalah race condition, deadlock, dan menggunakan teknik synchronization untuk memastikan konsistensi data.
1. Race Condition
Masalah:
- Jika dua thread mencoba mengakses dan memodifikasi saldo akun secara bersamaan tanpa sinkronisasi, hasil akhirnya bisa salah.
Kode Bermasalah (Race Condition):
2. Solusi: Synchronization
Gunakan synchronized
untuk memastikan hanya satu thread yang dapat mengakses metode deposit
atau withdraw
pada satu waktu.
Kode dengan Synchronization:
Output (Sinkronisasi):
3. Deadlock
Masalah:
- Jika dua thread memegang kunci (lock) pada dua objek berbeda dan mencoba mengakses kunci yang dipegang oleh thread lain, terjadi deadlock.
Kode Deadlock:
Perbaikan dengan ReentrantLock
:
4. ExecutorService dan java.util.concurrent
Untuk menangani banyak thread dengan lebih mudah, gunakan ExecutorService.
Kode dengan ExecutorService:
Output:
Konsep yang Digunakan:
- Race Condition:
- Dicegah dengan sinkronisasi (
synchronized
atauReentrantLock
).
- Dicegah dengan sinkronisasi (
- Deadlock:
- Dicegah dengan
tryLock()
atau menghindari penguncian bersamaan.
- Dicegah dengan
- Threading:
- Menangani banyak thread menggunakan
ExecutorService
.
- Menangani banyak thread menggunakan
- Concurrency Utilities:
- Gunakan kelas seperti
ReentrantLock
untuk pengendalian kunci yang lebih fleksibel.
- Gunakan kelas seperti
Contoh ini mencakup skenario umum dalam aplikasi keuangan seperti transaksi antar akun dengan memastikan keamanan data dan menghindari masalah threading.
No comments:
Post a Comment