Rumah  >  Artikel  >  Java  >  Concurrency di Jawa

Concurrency di Jawa

PHPz
PHPzasal
2024-08-30 16:18:26300semak imbas

Dalam dunia hari ini, segala-galanya berkembang pesat. Sentiasa ada ruang untuk penambahbaikan dalam setiap perkara. Begitu juga dengan bahasa pengaturcaraan kita. Hari ini, dengan teknologi moden kami, kami menjangkakan perkara dapat dilakukan dengan mudah dan pantas. Untuk melakukan beberapa perkara secara serentak, konsep konkurensi timbul. Jadi apakah concurrency, penggunaannya, mengapa ini diperlukan, dan banyak lagi? Kami akan cuba menyentuh soalan sedemikian dan menjawabnya dalam artikel ini secara individu. Oleh itu, mari kita bawa perbincangan kita ke bahagian umum yang sangat asas: definisi konkurensi. Dalam topik ini, kita akan mempelajari tentang konkurensi dalam Java.

Concurrency di Jawa

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Takrifan Keselarasan?

Jadi apakah konkurensi sebenarnya? Nah, untuk menjawabnya, mari kita ambil senario biasa. Katakan semasa membaca artikel ini, anda cuba melakukan pelbagai perkara secara serentak; mungkin anda cuba membuat nota, atau mungkin anda cuba memahaminya atau memikirkan beberapa perkara. Jadi dengan kata mudah, anda cuba melakukan pelbagai perkara secara selari. Inilah yang dimaksudkan dengan concurrency. Concurrency hanyalah melaksanakan pelbagai tugas selari antara satu sama lain. Kami akan membincangkan konkurensi dalam artikel ini dalam skop Java sebagai bahasa pengaturcaraan.

Sementara itu, marilah kita mempunyai definisi asas bagi benang. Sebenarnya, dalam Java atau umum, dalam mana-mana bahasa pengaturcaraan, ia adalah benang yang bertanggungjawab untuk membawa konkurensi. Peranan asas urutan ini adalah untuk memudahkan pelaksanaan tugasan selari.

Jadi, Apakah Benang?

Benang ialah proses ringan dengan timbunan panggilannya sendiri. Walau bagaimanapun, utas boleh mengakses data kongsi daripada utas lain yang dilaksanakan di bawah proses yang sama. Kami boleh menggunakan banyak urutan dalam aplikasi Java untuk mencapai pemprosesan selari atau konkurensi.

Sekarang mari kita beralih ke topik seterusnya, iaitu…

Keselarasan dalam definisi Java?

Jadi, semua bahasa OOP mempunyai konsep threading dalam Java atau mana-mana bahasa pengaturcaraan lain seperti C#. Di Java, kami mempunyai proses berbeza yang dijalankan dengan membuat urutan berbeza untuk mencapai kesesuaian.

Jadi selepas definisi mudah ini, mari kita bincangkan topik baharu kita, iaitu:

Apakah yang Menjadikan Aplikasi Java Serentak?

Kelas pertama, yang mana satu perlu membuat aplikasi Java serentak, ialah kelas java.lang.Thread. Kelas Java.lang.Thread bertanggungjawab untuk semua konsep konkurensi dalam bahasa pengaturcaraan Java. Selepas ini, kami mempunyai antara muka java.lang.Runnable untuk mengabstrak gelagat benang daripada kelas benang.

Kelas lain yang kami perlukan untuk membina aplikasi lanjutan akan digunakan daripada pakej java.util.concurrent yang ditambahkan dalam Java 1.5.

Kini dengan itu, kami telah mencapai soalan baharu iaitu…

Adakah Java Concurrency sangat mudah?

Memandangkan pelaksanaan konkurensi dalam Java agak mudah. Namun, sebenarnya tidak begitu. Mari kita lihat.

Perbincangan kami di atas secara amnya memberi gambaran bahawa concurrency adalah konsep yang mudah, baik dan agak mudah untuk dilaksanakan. Baiklah, katakan kita memantaunya dengan lebih baik dan cuba memahaminya. Dalam kes itu, ia memerlukan pemahaman yang baik tentang konsep asas dan pemahaman yang menyeluruh tentang perkara yang mesti kita capai.

Mari kita bandingkan aplikasi serentak dan aplikasi satu benang. Kami biasanya mendapati bahawa aplikasi serentak adalah rumit mengenai reka bentuk dan pemahaman. Kod yang dilaksanakan oleh berbilang rangkaian memerlukan perhatian dan sumber khas untuk mengakses data yang dikongsi. Ralat muncul disebabkan penyegerakan benang yang salah sukar untuk dinyahpepijat dan diperbaiki. Juga, dalam kebanyakan senario, pepijat ini tidak dikenal pasti dalam fasa awal; ia dikesan dalam mod prod, yang lebih sukar untuk dihasilkan semula.

Selain daripada pepijat dan kecacatan biasa, urutan serentak memerlukan lebih banyak sumber untuk menjalankan aplikasi.

Masalah dan Penambahbaikan dalam Concurrency – Penjelasan dengan Contoh

Jadi pada asasnya, terdapat dua jenis masalah yang diberikan kerana konkurensi. Masalah ini boleh dikelaskan secara meluas kepada dua kategori

  • Ralat gangguan benang
  • Ralat ketekalan ingatan

Mari kita fahami setiap satu.

Ralat gangguan benang

Mari kita fahami dengan contoh mudah.

Andaikan kita mempunyai fungsi pembilang yang peranan asasnya adalah untuk menambah pembilang atau kiraan sesuatu nombor. Katakan kita mempunyai utas A dan utas B, dan utas A membaca nilai awal sebagai 0. Sekarang, langkah berikut berjalan secara berurutan.

  1. Benang A membaca nilai awal sebagai 0
  2. Benang B membaca nilai awal sebagai 0
  3. Benang A meningkatkan nilai sebanyak 1. Nilai baharu kini ialah 1
  4. Benang B juga, secara selari, meningkatkan nilai kepada 1.
  5. Benang A menulis nilai yang dikemas kini iaitu 1, ke dalam sel memori
  6. Benang B juga mengulangi langkah yang sama, yang ditulis dalam nilai kemas kini sel memori 1

Jadi di sini masalah timbul. Dua utas, A & B, laksanakan kod dua kali, dan nilai yang dijangkakan ialah 2, tetapi ia ditunjukkan sebagai 1. Ini adalah masalah utama yang boleh ditimbulkan oleh berbilang rangkaian.

Bagaimanakah perkara ini boleh diselesaikan?

Ralat gangguan benang boleh diselesaikan dengan menyegerakkan akses kepada pembolehubah yang dikongsi. Kita mesti sentiasa selari dengan nilai yang dikemas kini antara data yang dikongsi.

Dengan ini, mari kita lihat jenis ralat kedua…

Ralat Ketekalan Ingatan

Ralat ketidakkonsistenan memori biasanya berlaku apabila urutan yang berbeza cuba membaca atau mempunyai pandangan yang tidak konsisten pada sekeping data yang sama. Ini biasanya berlaku apabila urutan pertama mengemas kini beberapa data yang dikongsi. Nilai yang dikemas kini ini tidak disebarkan ke urutan kedua atau berbeza dan ia membaca data lama.

Mari kita lihat mengapa ini berlaku.

Nah, mungkin terdapat banyak sebab untuk ini. Biasanya, pengkompil biasanya melakukan beberapa pengoptimuman pada aplikasi untuk meningkatkan prestasi. Ia juga mungkin mengemas kini urutan arahan untuk mengoptimumkan prestasi. Malah secara amnya, pemproses juga cuba mengoptimumkan kod; contohnya, CPU mungkin membaca nilai semasa pembolehubah daripada memori cache atau daftar sementara dan bukannya memori utama.

Kesimpulan

Concurrency ialah ciri yang sangat penting bagi mana-mana bahasa OOP. Threading membolehkan kami melaksanakan pelbagai proses selari antara satu sama lain. Ia membantu kami melaksanakan tugas kompleks kami dengan lebih cepat. Walau bagaimanapun, kebaikan, concurrency mempunyai beberapa keburukan juga. Menggunakan benang menyebabkan penggunaan sumber yang banyak.

Atas ialah kandungan terperinci Concurrency di Jawa. 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
Artikel sebelumnya:Apakah Penyegerakan dalam Java?Artikel seterusnya:Apakah Penyegerakan dalam Java?