0Pricing
Java Academy · Pelajaran

Kesalahan Umum Konkurensi

Identifikasi kesalahan umum konkurensi: kondisi balapan, kebuntuan, dan masalah visibilitas.

Kesalahan Umum Konkurensi adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 3 pelajaran total.

Pendahuluan

Konkurensi dapat menimbulkan galat: kondisi balapan, kebuntuan, kelaparan, dan masalah visibilitas.

Kondisi balapan

Kondisi balapan terjadi ketika utas berjalan berselang-seling secara tak terduga sehingga menghasilkan nilai yang salah.

Kode: kondisi balapan

Tanpa sinkronisasi, operasi penambahan nilai saling tumpang tindih sehingga menghasilkan hitungan yang salah.

public class Main {
  private int count = 0;
  public void increment() { count++; }
  public static void main(String[] args) throws Exception {
    Main obj = new Main();
    Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
    Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
    t1.start(); t2.start();
    t1.join(); t2.join();
    System.out.println("Count (expected 2000) = " + obj.count);
  }
}

Kebuntuan

Kebuntuan: dua utas masing-masing memegang kunci dan menunggu kunci milik utas lainnya, sehingga keduanya berhenti.

Kode: kebuntuan

Kode ini dapat mengalami kebuntuan: setiap utas menunggu selamanya untuk mendapatkan kunci milik utas lainnya.

public class Main {
  private final Object lock1 = new Object();
  private final Object lock2 = new Object();
  public void method1() {
    synchronized(lock1) {
      try { Thread.sleep(50); } catch(Exception e) {}
      synchronized(lock2) { System.out.println("method1"); }
    }
  }
  public void method2() {
    synchronized(lock2) {
      try { Thread.sleep(50); } catch(Exception e) {}
      synchronized(lock1) { System.out.println("method2"); }
    }
  }
  public static void main(String[] args) {
    Main obj = new Main();
    new Thread(obj::method1).start();
    new Thread(obj::method2).start();
  }
}

Kode: masalah visibilitas

Tanpa volatile, satu utas mungkin tidak melihat pembaruan dari utas lain karena penyimpanan dalam cache.

public class Main {
  private static boolean flag = false;
  public static void main(String[] args) throws Exception {
    Thread writer = new Thread(() -> { flag = true; });
    Thread reader = new Thread(() -> { while(!flag) {} System.out.println("Flag seen true"); });
    writer.start(); reader.start();
    writer.join(); reader.join();
  }
}

Pemeriksaan galat konkurensi

Pemeriksaan singkat: Masalah apa yang terjadi ketika dua utas menunggu kunci milik satu sama lain selamanya?

Ringkasan

Ringkasan: Galat mencakup kondisi balapan, kebuntuan, dan masalah visibilitas. Sinkronisasi dan kata kunci volatil membantu menghindarinya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kesalahan Umum Konkurensi” gratis?

Ya — teks lengkap “Kesalahan Umum Konkurensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Kesalahan Umum Konkurensi”?

Identifikasi kesalahan umum konkurensi: kondisi balapan, kebuntuan, dan masalah visibilitas. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.

Berapa lama pelajaran “Kesalahan Umum Konkurensi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Sinkronisasi dan Kunci
  2. Variabel Atomik dan Koleksi Konkuren
  3. Kesalahan Umum Konkurensi
← Kembali ke Java Academy