Rumah  >  Artikel  >  Java  >  Penyegerakan benang Java dan pengecualian bersama: asas pengaturcaraan berbilang benang, mesti tahu

Penyegerakan benang Java dan pengecualian bersama: asas pengaturcaraan berbilang benang, mesti tahu

PHPz
PHPzke hadapan
2024-02-19 18:54:38511semak imbas

Penyegerakan benang Java dan pengecualian bersama: asas pengaturcaraan berbilang benang, mesti tahu

Penyegerakan benang Java dan pengecualian bersama adalah asas pengaturcaraan berbilang benang dan penting untuk pengaturcara Java. Editor PHP Yuzai akan membawa anda memahami konsep penting ini secara mendalam, membincangkan prinsipnya, penggunaan dan masalah biasa, membolehkan anda memahami dengan mudah intipati pengaturcaraan berbilang benang.

Sumber dikongsi merujuk kepada sumber yang boleh diakses oleh berbilang urutan pada masa yang sama, seperti pembolehubah global atau fail, dsb. Apabila berbilang benang mengakses sumber kongsi pada masa yang sama, ketidakkonsistenan data mungkin berlaku, menyebabkan ralat program.

Untuk mengelakkan konflik berbilang benang, mekanisme penyegerakan perlu digunakan untuk memastikan atomicity sumber dikongsi, iaitu, hanya satu utas dibenarkan untuk mengakses sumber dikongsi pada satu masa. Dalam Java, penyegerakan boleh dicapai menggunakan kata kunci yang disegerakkan atau antara muka Kunci.

Penggunaan kata kunci yang disegerakkan adalah sangat mudah, cuma tambah kata kunci yang disegerakkan sebelum kaedah atau blok kod. Contohnya:

public class Counter {
private int value = 0;

public synchronized void increment() {
value++;
}
}

Dalam kod ini, kaedah increment() diubah suai dengan kata kunci yang disegerakkan, yang bermaksud hanya satu utas boleh melaksanakan kaedah ini pada satu-satu masa. Oleh itu, walaupun berbilang benang memanggil kaedah increment() pada masa yang sama, tidak akan ada ketidakkonsistenan data.

Antara muka

Lock menyediakan kawalan penyegerakan yang lebih halus, yang membolehkan programmer memperoleh dan melepaskan lock secara eksplisit. Contohnya:

public class Counter {
private int value = 0;
private Lock lock = new ReentrantLock();

public void increment() {
lock.lock();
try {
value++;
} finally {
lock.unlock();
}
}
}

Dalam kod ini, kaedah lock.lock() memperoleh kunci dan kaedah lock.unlock() melepaskan kunci. Hanya benang yang memperoleh kunci boleh melaksanakan kaedah increment(), jadi konflik berbilang benang juga boleh dielakkan.

Selain menggunakan mekanisme penyegerakan, anda juga boleh menggunakan kunci mutex untuk mencapai penyegerakan berbilang benang. Kunci mutex ialah kunci khas yang hanya boleh dipegang oleh satu utas Benang lain mesti menunggu benang melepaskan kunci sebelum mereka boleh memperoleh kunci.

Di Java, kunci mutex boleh dilaksanakan menggunakan kelas Mutex atau kata kunci yang disegerakkan. Contohnya:

public class Counter {
private int value = 0;
private Mutex mutex = new Mutex();

public void increment() {
mutex.acquire();
try {
value++;
} finally {
mutex.release();
}
}
}

Dalam kod ini, kaedah mutex.acquire() memperoleh kunci, dan kaedah mutex.release() melepaskan kunci. Hanya benang yang memperoleh kunci boleh melaksanakan kaedah increment(), jadi konflik berbilang benang juga boleh dielakkan.

Ringkasnya, penyegerakan benang Java dan pengecualian bersama adalah konsep penting dalam pengaturcaraan berbilang benang Menggunakan kaedah yang betul boleh mengelakkan konflik berbilang benang yang disebabkan oleh sumber yang dikongsi.

Atas ialah kandungan terperinci Penyegerakan benang Java dan pengecualian bersama: asas pengaturcaraan berbilang benang, mesti tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lsjlt.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam