Sesuatu keadaan perlumbaan ialah dalam pengaturcaraan berbilang benang, berbilang rangkaian mengakses dan mengubah suai data dikongsi pada masa yang sama, mengakibatkan data tidak konsisten. Cara biasa untuk mengelakkan keadaan perlumbaan termasuk menggunakan kunci untuk memastikan bahawa hanya satu utas boleh mengakses data yang dikongsi pada satu masa. Gunakan operasi atom untuk memastikan integriti data. Isytiharkan data yang dikongsi sebagai tidak berubah untuk mengelakkan pengubahsuaian yang tidak disengajakan.
Mengelakkan keadaan perlumbaan dalam kesesuaian dan multithreading fungsi Java
Apakah keadaan perlumbaan
Dalam pengaturcaraan berbilang benang, keadaan perlumbaan merujuk kepada dua atau lebih benang yang dikongsi mengakses dan mengubah suai data yang sama masa , mengakibatkan data tidak konsisten.
Cara mengelakkan keadaan perlumbaan
Cara biasa untuk mengelakkan keadaan perlumbaan adalah dengan menggunakan mekanisme penyegerakan, seperti:
Kes Praktikal
Pertimbangkan fungsi Java berikut yang cuba menambah pembilang kongsi:
public class Counter { private int count = 0; public void increment() { count++; } }
Dalam fungsi ini, count
ialah data kongsi dan increment()</ code> kaedah adalah untuk mengaksesnya secara serentak. Jika mekanisme penyegerakan tidak digunakan, dua utas boleh memanggil <code>increment()
pada masa yang sama, menyebabkan count
tidak dikemas kini dengan betul. count
是共享数据,而 increment()
方法是并发访问它。如果不采用同步机制,可能发生两个线程同时调用 increment()
,导致 count
被错误地更新。
使用锁可以避免这种情况:
private Object lock = new Object(); public void increment() { synchronized (lock) { count++; } }
通过使用 synchronized
块,我们确保一次只有一个线程可以执行 increment()
rrreeeDengan menggunakan blok synchronized
, kami memastikan bahawa hanya satu thread boleh melaksanakan kaedah increment()
pada satu masa, dengan itu menghalang keadaan kaum.
Atas ialah kandungan terperinci Bagaimana untuk mengelakkan keadaan perlumbaan dalam concurrency dan multithreading fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!