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 (
synchronizedatauReentrantLock).
- 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
ReentrantLockuntuk 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