Pernahkah Anda memperhatikan Kondisi Ras di Contoh Konkurensi Multi-threading Java? Bagaimana menghadapinya?

Diterbitkan: 2019-12-11

sudah-Anda-perhatikan-ras-kondisi-dalam-java-multi-threading-concurrency-contoh

Beberapa waktu yang lalu saya telah menulis artikel tentang Contoh Konsumen Produsen dan bagaimana menangani operasi baca/tulis dengan cara yang lebih baik di Jawa. Pada catatan serupa, dalam tutorial ini kita akan membahas sesuatu tentang Race Condition dan Thread locking .

Jika Anda memiliki salah satu pertanyaan di bawah ini maka Anda berada di tempat yang tepat:

  • Contoh kondisi balapan Jawa
  • contoh java mutex
  • multithreading – Apa itu kondisi balapan?
  • Kondisi Balapan dan Bagian Kritis
  • Apa itu kondisi balapan?
  • Bagaimana menangani Race Condition di Jawa dengan Contoh

Mengapa Kondisi Ras di Jawa Terjadi?

Kondisi balapan di Jawa terjadi ketika two or more threads mencoba mengubah/memperbarui data bersama pada saat yang same time .

Mari kita lihat logika Program di bawah ini:

Ini adalah contoh perbankan yang sangat sederhana di mana Anda akan deposit dan withdraw jumlah 100 times . Anda akan menyetor $100 total 100 kali = $100 x 100 = $10.000 dan Anda akan menarik $50 total 100 kali = $50 x 100 = $5.000. Pada akhir penyelesaian program, Anda harus memiliki $5000 di bank Anda.

Berikut langkah-langkahnya:

  1. Buat kelas CrunchifyRaceCondition.java
  2. Buat kelas CrunchifyTransaction.java
  3. Buat kelas CrunchifyBankAccount.java
  4. Kami akan menjalankan kelas CrunchifyRaceCondition dan itu akan memulai setoran dan penarikan 100 kali.
  5. Kami akan menjalankannya with Synchronized block untuk memeriksa hasilnya
  6. Kami akan menjalankannya without Synchronized block untuk memeriksa hasil

CrunchifyRaceCondition.java

CrunchifyTransaction.java

CrunchifyBankAccount.java

Silakan periksa baris 24 dan 34 di atas. Simpan kata kunci yang Synchronized itu dan jalankan program Anda. Anda akan melihat hasil yang benar seperti yang Anda lihat pada gambar di bawah ini.

Kata Kunci Blok Sinkronisasi Java - Crunchify

Sekarang hapus kata kunci yang disinkronkan dari baris 24 dan 34 dan jalankan program yang sama.

Anda mungkin perlu menjalankan program ini beberapa kali untuk melihat masalah. Di Jawa tidak ada jaminan Anda akan melihat kondisi Race setiap saat.

Java tanpa Kata Kunci Blok yang Disinkronkan - Crunchify

Jika Anda memiliki aplikasi tingkat perusahaan dan Anda berbicara tentang jutaan transaksi per detik maka kondisi balapan dapat menyebabkan bencana bagi perusahaan Anda.

Sekarang pertanyaannya adalah bagaimana menghindari Race Condition di Aplikasi Java Anda?

  1. Jika kondisi balapan dalam pembaruan untuk beberapa struktur data dalam memori bersama, Anda perlu menyinkronkan akses dan pembaruan ke struktur data dengan cara yang sesuai.
  2. Jika kondisi balapan dalam pembaruan ke database Anda, Anda perlu merestrukturisasi SQL Anda untuk menggunakan transaksi pada tingkat perincian yang sesuai.
  3. Bukan ide yang buruk untuk melakukan pengujian beban sebelum ditayangkan dalam produksi. Lebih banyak beban dapat menyebabkan Kondisi Balap yang langka. Lebih baik memperbaikinya sebelum memperbaikinya nanti.
  4. Pastikan Anda tidak memiliki variabel global tempat Anda menulis.
  5. Di Jawa, setiap objek memiliki satu dan hanya satu monitor dan mutex yang terkait dengannya. Monitor tunggal memiliki beberapa pintu ke dalamnya, namun, masing-masing ditunjukkan oleh kata kunci yang synchronized . Ketika sebuah utas melewati kata kunci yang synchronized , itu secara efektif mengunci semua pintu.
  6. Tentu saja, jika utas tidak melewati kata kunci yang synchronized , itu tidak mengunci pintu, dan beberapa utas lainnya bebas masuk kapan saja.