Rumah  >  Artikel  >  Java  >  Keselamatan benang dalam pembangunan API Java

Keselamatan benang dalam pembangunan API Java

王林
王林asal
2023-06-18 12:54:231099semak imbas

API Java ialah salah satu bahasa pengaturcaraan yang paling banyak digunakan, yang boleh membantu pembangun membina aplikasi merentas platform dengan cepat. Walau bagaimanapun, isu keselamatan benang adalah salah satu masalah yang sangat biasa semasa pembangunan API Java. Keselamatan benang bermakna apabila berbilang rangkaian mengakses sumber yang dikongsi pada masa yang sama, masalah konkurensi data yang salah tidak akan berlaku.

Dalam pembangunan Java API, terdapat banyak cara untuk mencapai pemprosesan keselamatan benang Kami boleh memastikan keselamatan benang dengan mengunci sumber yang dikongsi, menggunakan kaedah penyegerakan atau menggunakan kata kunci yang tidak menentu. Pelaksanaan khusus kaedah ini akan diperkenalkan di bawah.

1. Mengunci sumber kongsi

Mengunci sumber dikongsi ialah kaedah pemprosesan selamat benang yang paling biasa digunakan dalam pembangunan API Java sumber. Terdapat dua kaedah pelaksanaan khusus:

(1) Kunci keseluruhan kaedah

Menggunakan kata kunci yang disegerakkan untuk mengubah suai keseluruhan kaedah adalah sangat mudah Anda hanya perlu menambah kata kunci yang disegerakkan sebelum kaedah tandatangan. Seperti yang ditunjukkan di bawah:

kaedah void disegerakkan awam(){
// Blok kod yang perlu disegerakkan
}

Kaedah ini boleh memastikan keselamatan benang dengan baik, tetapi ia kelemahannya ialah kecekapannya rendah Apabila beberapa utas mengaksesnya pada masa yang sama, hanya satu utas boleh memasuki badan kaedah, dan utas lain perlu menunggu, sekali gus mengurangkan prestasi serentak program.

(2) Kunci sumber kongsi

Selain mengunci keseluruhan kaedah, kami juga boleh mencapai keselamatan benang dengan mengunci sumber kongsi. Pelaksanaan khusus adalah menggunakan kata kunci yang disegerakkan dalam blok kod yang perlu disegerakkan untuk mengunci sumber yang dikongsi. Seperti yang ditunjukkan di bawah:

kaedah lompang awam(){
disegerakkan (objek){

// 需要同步的代码块

}
}

Kaedah ini agak fleksibel, hanya Apabila berbilang benang perlu mengakses sumber yang dikongsi pada masa yang sama, penyegerakan diperlukan, dengan itu meningkatkan prestasi serentak program.

2. Gunakan kaedah disegerakkan

Kaedah disegerakkan adalah serupa dengan mengunci keseluruhan kaedah Anda hanya perlu menambah kata kunci disegerakkan sebelum tandatangan kaedah. Seperti yang ditunjukkan di bawah:

kaedah void disegerakkan awam(){
// Blok kod yang perlu disegerakkan
}

Kelebihan utama kaedah disegerakkan ialah ia boleh kunci penyegerakan dan kaedah Diikat bersama, ini bermakna kunci penyegerakan dilepaskan secara automatik, sekali gus mengelakkan masalah kebuntuan. Tetapi kelemahannya adalah serupa dengan mengunci keseluruhan kaedah, yang kurang cekap.

3 Gunakan kata kunci yang tidak menentu

Menggunakan kata kunci yang tidak menentu boleh menjamin keterlihatan pembolehubah yang dikongsi dan memastikan keselamatan rangkaian walaupun semasa berinteraksi antara berbilang rangkaian. Seperti yang ditunjukkan di bawah:

nombor int tidak menentu awam = 0;

Apabila pembolehubah ditandakan tidak menentu, setiap pengubahsuaian akan dipaksa untuk dialihkan ke memori utama, dan yang terkini akan di- diperoleh apabila ia diakses seterusnya. Disebabkan oleh mekanisme ini, tidak menentu boleh menjamin keterlihatan antara berbilang benang dan mengoptimumkan prestasi program.

4. Gunakan kumpulan benang

Dalam pembangunan API Java, menggunakan kumpulan benang juga merupakan kaedah keselamatan benang yang sangat biasa. Kumpulan benang boleh mengelakkan overhed mencipta benang dengan mencipta benang terlebih dahulu dan kemudian menetapkan tugasan kepada utas ini, dan boleh mengawal bilangan utas yang dilaksanakan serentak, dengan itu mengurangkan pembaziran sumber. Kumpulan benang boleh dibuat menggunakan kelas ThreadPoolExecutor yang disediakan oleh JDK, seperti yang ditunjukkan di bawah:

Pelaksana ThreadPoolExecutor = ThreadPoolExecutor baharu(5, 10, 5000, TimeUnit.MILLISECONDS, LinkedBlockingQuetue)<1 baharu ;

Antaranya, parameter masing-masing mewakili bilangan kumpulan benang teras, bilangan maksimum kumpulan benang, masa melahu benang yang dibenarkan, baris gilir menunggu dan dasar penolakan. Apabila menggunakan kumpulan benang, kami boleh mengawal cara tugasan dilaksanakan melalui baris gilir tugas dan dasar penolakan untuk memastikan keselamatan rangkaian.

Ringkasan

Pemprosesan keselamatan benang dalam pembangunan API Java ialah isu yang sangat penting Senario aplikasi yang berbeza memerlukan kaedah pemprosesan keselamatan benang yang berbeza. Artikel ini memperkenalkan empat kaedah yang biasa digunakan, antaranya mengunci sumber yang dikongsi ialah kaedah yang paling biasa digunakan, tetapi ia akan memberi kesan yang lebih besar terhadap kecekapan program. Oleh itu, dalam aplikasi praktikal, kita harus memilih kaedah pemprosesan keselamatan benang yang paling sesuai mengikut senario tertentu.

Atas ialah kandungan terperinci Keselamatan benang dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn