Java Academy · Pelajaran

Pepijat Keserentakan Lazim

Kenal pasti pepijat keserentakan lazim: keadaan perlumbaan, kebuntuan dan isu keterlihatan.

Pelajaran 3 daripada 38 langkah

Pepijat Keserentakan Lazim ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 3 pelajaran.

Pengenalan

Keserentakan boleh menyebabkan pepijat: keadaan perlumbaan, kebuntuan, kebuluran dan masalah keterlihatan.

Keadaan perlumbaan

Keadaan perlumbaan berlaku apabila utas berselang-seli tanpa dapat dijangka lalu menghasilkan keputusan yang salah.

Kod: keadaan perlumbaan

Tanpa penyegerakan, operasi peningkatan nilai bertindih dan menghasilkan kiraan 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 utas yang lain, menyebabkan kedua-duanya terhenti.

Kod: kebuntuan

Kod ini mungkin mengalami kebuntuan: setiap utas menunggu selama-lamanya untuk kunci utas yang lain.

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();
  }
}

Kod: isu keterlihatan

Tanpa volatile, satu utas mungkin tidak melihat kemas kini utas yang lain kerana penyimpanan 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();
  }
}

Semakan pepijat keserentakan

Semakan ringkas: Apakah masalah yang berlaku apabila dua utas menunggu kunci satu sama lain selama-lamanya?

Ringkasan

Ringkasan: Pepijat merangkumi keadaan perlumbaan, kebuntuan dan masalah keterlihatan. Penyegerakan dan volatile membantu mengelakkannya.

Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Pepijat Keserentakan Lazim” percuma?

Ya — teks penuh “Pepijat Keserentakan Lazim” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Pepijat Keserentakan Lazim”?

Kenal pasti pepijat keserentakan lazim: keadaan perlumbaan, kebuntuan dan isu keterlihatan. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 3.

Berapa lamakah pelajaran “Pepijat Keserentakan Lazim” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Penyegerakan dan Kunci
  2. Koleksi Atomik dan Serentak
  3. Pepijat Keserentakan Lazim
← Kembali ke Java Academy