Artikel ini membawakan anda pengetahuan yang berkaitan tentang java terutamanya mengatur soalan berkaitan tentang soalan temu duga benang, termasuk perbezaan antara kaedah biasa yang diubah suai segerakan dan kaedah statik, dan pengaturcaraan tanpa kunci CAS. perbezaan antara tidak menentu dan menyegerak, dsb., mari kita lihat bersama-sama, saya harap ia akan membantu semua orang.
Pembelajaran yang disyorkan: "tutorial video java"
Kunci objek digunakan untuk kaedah contoh objek, atau contoh objek, dan kunci kelas digunakan untuk kaedah statik kelas atau objek kelas kelas. Kita tahu bahawa terdapat banyak contoh objek dalam kelas, tetapi setiap kelas hanya mempunyai satu objek kelas, jadi kunci objek bagi contoh objek berbeza tidak mengganggu antara satu sama lain, tetapi hanya terdapat satu kunci kelas untuk setiap kelas.
Satu perkara yang mesti diperhatikan ialah sebenarnya, kunci kelas hanyalah perkara konseptual dan sebenarnya kunci kelas tidak wujud mengunci objek kelas yang sepadan bagi setiap kelas. Kunci kelas dan kunci objek juga tidak mengganggu antara satu sama lain.
Keterlihatan bermakna apabila berbilang rangkaian mengakses pembolehubah yang sama, jika satu utas mengubah nilai pembolehubah, utas lain boleh melihat nilai yang diubah suai dengan serta-merta.
Memandangkan semua operasi pada pembolehubah mengikut benang mesti dilakukan dalam memori kerja dan tidak boleh membaca dan menulis secara langsung pembolehubah dalam ingatan utama, maka untuk pembolehubah kongsi V, mereka mula-mula berada dalam memori kerja mereka sendiri dan kemudian disegerakkan ke utama ingatan. Walau bagaimanapun, ia tidak akan dibuang ke memori utama dalam masa, tetapi akan terdapat perbezaan masa tertentu. Jelas sekali, pada masa ini, operasi thread A pada pembolehubah V tidak lagi kelihatan kepada thread B.
Untuk menyelesaikan masalah keterlihatan objek yang dikongsi, kita boleh menggunakan kata kunci atau kunci yang tidak menentu.
Pemproses semasa pada asasnya menyokong arahan CAS(), tetapi algoritma yang dilaksanakan oleh setiap pengilang adalah berbeza Setiap proses operasi CAS mengandungi tiga operator: alamat memori V, Nilai dijangka A dan nilai baharu B. Semasa operasi, jika nilai yang disimpan di alamat ini adalah sama dengan nilai yang dijangkakan A, maka nilai di alamat itu diberikan kepada nilai baharu B, jika tidak, tiada operasi dilakukan.
Idea asas CAS ialah jika nilai di alamat ini sama dengan nilai yang dijangkakan, berikan nilai baharu. Gelung CAS adalah untuk terus melaksanakan operasi cas dalam gelung sehingga ia berjaya. Kita juga boleh bercakap tentang tiga masalah utama dengan CAS.
Utas boleh berulang kali memasukkan mana-mana blok kod yang disegerakkan dengan kunci yang sudah dimilikinya dan ReentrantLock kedua-duanya adalah kunci masuk semula. Dari segi pelaksanaan, setiap kali benang memperoleh kunci, ia menentukan sama ada benang yang memperoleh kunci itu sendiri, dan hanya mengumpulkan pembilang Setiap kali kunci dilepaskan, pembilang dikurangkan sehingga kalkulator kembali kepada sifar, menunjukkan bahawa. benang telah dilepaskan sepenuhnya. Lapisan bawah dilaksanakan menggunakan AQS dalam JUC.
ialah rangka kerja asas yang digunakan untuk membina kunci atau komponen penyegerakan lain Contohnya, ReentrantLock, ReentrantReadWriteLock dan CountDownLatch dilaksanakan berdasarkan AQS. Ia menggunakan pembolehubah ahli int untuk mewakili status penyegerakan, dan menggunakan baris gilir FIFO terbina dalam untuk menyelesaikan kerja baris gilir urutan pemerolehan sumber. Ia ialah pelaksanaan varian kunci baris gilir CLH. Ia boleh mencapai 2 kaedah penyegerakan: eksklusif dan dikongsi.
Cara utama untuk menggunakan AQS ialah pewarisan Subkelas mewarisi AQS dan melaksanakan kaedah abstraknya untuk mengurus status penyegerakan adalah berdasarkan corak kaedah templat, jadi jika kita ingin melaksanakan kelas alat penyegerakan kita sendiri. kita perlu menutupnya beberapa kaedah yang boleh diganti, seperti tryAcquire, tryReleaseShared, dsb.
Tujuan reka bentuk ini ialah komponen penyegerakan (seperti kunci) berorientasikan pengguna Ia mentakrifkan antara muka untuk pengguna berinteraksi dengan komponen penyegerakan (contohnya, membenarkan dua utas mengakses secara selari), menyembunyikan butiran pelaksanaan; penyegerak adalah berorientasikan pengguna adalah pelaksana kunci Ia memudahkan pelaksanaan kunci dan perisai operasi asas seperti pengurusan keadaan penyegerakan, baris beratur, menunggu dan bangun. Ini secara berkesan mengasingkan kawasan yang pengguna dan pelaksana perlu fokus.
Secara dalaman, AQS mengekalkan keadaan sumber dikongsi dan menggunakan FIFO terbina dalam untuk menyelesaikan kerja beratur urutan pemerolehan sumber. Baris gilir terdiri daripada nod Nod satu demi satu Setiap nod Nod mengekalkan rujukan terdahulu dan rujukan seterusnya, yang masing-masing menunjuk ke nod pendahulu dan penggantinya sendiri, membentuk senarai berganda dua hujung.
Prinsip disegerakkan (ini): melibatkan dua arahan: monitorenter, monitorexit; mari kita bercakap tentang kaedah penyegerakan Berdasarkan hasil penyahkompiunan kaedah penyegerakan, penyegerakan kaedah tidak dicapai melalui arahan monitorenter dan. monitorexit. Berbanding dengan kaedah Biasa mempunyai pengecam ACC_SYNCHRONIZED tambahan dalam kumpulan tetap.
JVM melaksanakan penyegerakan kaedah berdasarkan pengecam ini: apabila kaedah dipanggil, arahan panggilan akan menyemak sama ada bendera akses ACC_SYNCHRONIZED kaedah ditetapkan Jika ia ditetapkan, urutan pelaksanaan akan terlebih dahulu memperoleh monitor pemerolehan berjaya, Badan kaedah boleh dilaksanakan, dan monitor boleh dikeluarkan selepas kaedah dilaksanakan. Semasa pelaksanaan kaedah, tiada utas lain boleh mendapatkan objek monitor yang sama sekali lagi.
Memperkenalkan teknologi seperti kunci putaran, kunci putaran adaptif, penyingkiran kunci, penguncian kasar, kunci berat sebelah, kunci ringan, analisis melarikan diri, dll. Untuk mengurangkan kos operasi kunci.
Kunci objek digunakan untuk kaedah contoh objek atau tika objek digunakan untuk kaedah statik kelas atau objek kelas kelas. Kita tahu bahawa terdapat banyak contoh objek dalam kelas, tetapi setiap kelas hanya mempunyai satu objek kelas, jadi kunci objek bagi contoh objek berbeza tidak mengganggu antara satu sama lain, tetapi hanya terdapat satu kunci kelas untuk setiap kelas.
Satu perkara yang mesti diperhatikan ialah sebenarnya, kunci kelas hanyalah perkara konseptual dan sebenarnya kunci kelas tidak wujud mengunci objek kelas yang sepadan bagi setiap kelas. Kunci kelas dan kunci objek juga tidak mengganggu antara satu sama lain.
Tiada jaminan bahawa peranan DCL adalah: tidak menentu akan memastikan keterlihatan dan keteraturan pembolehubah yang diubah suai, memastikan bahawa dalam mod tunggal, susunan pelaksanaan semasa mencipta objek mestilah
Meruap ialah mekanisme penyegerakan yang paling ringan. Meruap menjamin keterlihatan apabila utas yang berbeza beroperasi pada pembolehubah ini Iaitu, jika satu utas mengubah nilai pembolehubah, nilai baharu itu dapat dilihat dengan serta-merta kepada utas lain. Walau bagaimanapun, tidak menentu tidak dapat menjamin keatoman operasi, jadi operasi tulis komposit di bawah berbilang benang akan menyebabkan isu keselamatan benang.
Kata kunci yang disegerakkan boleh digunakan untuk mengubah suai kaedah atau dalam bentuk blok yang disegerakkan Ia terutamanya memastikan bahawa berbilang utas hanya boleh mempunyai satu utas dalam kaedah atau blok disegerakkan pada masa yang sama Ia memastikan bahawa utas mengakses pembolehubah dengan selamat. Keterlihatan dan eksklusif, juga dikenali sebagai mekanisme penguncian terbina dalam.
Benang Daemon ialah benang sokongan kerana ia digunakan terutamanya untuk penjadualan latar belakang dan kerja sokongan dalam program. Ini bermakna apabila tiada benang bukan Daemon dalam mesin maya Java, mesin maya Java akan keluar. Benang boleh ditetapkan sebagai benang Daemon dengan memanggil Thread.setDaemon(true). Kami biasanya tidak menggunakannya. Contohnya, benang kutipan sampah ialah benang Daemon.
Hentian utas : Sama ada pelaksanaan Run selesai, atau kelainan yang tidak diproses menyebabkan utas ditamatkan lebih awal. API yang sepadan dengan Thread utas untuk menggantung, menyambung semula dan menghentikan operasi ialah suspend(), resume(), dan stop(). Tetapi API ini sudah lapuk, iaitu penggunaannya tidak disyorkan. Kerana ia akan menyebabkan program berjalan dalam keadaan tidak menentu. Penggantungan selamat adalah untuk utas lain mengganggu utas A tertentu dengan memanggil kaedah interrupt()nya, benang terputus menentukan sama ada ia telah diganggu melalui kaedah utas isInterrupted(), atau ia boleh dipanggil Thread kaedah statik. interrupted() digunakan untuk menentukan sama ada benang semasa terganggu, tetapi Thread.interrupted() juga akan menulis semula bit bendera gangguan kepada false.
Selepas yield() dan sleep() dipanggil, kunci yang dipegang oleh benang semasa tidak akan dilepaskan.
Selepas memanggil kaedah tunggu(), kunci yang dipegang oleh utas semasa akan dilepaskan, dan selepas utas semasa dibangkitkan, ia akan bersaing untuk mengunci semula Kod di belakang kaedah tunggu akan dilaksanakan hanya selepas kunci dipertandingkan.
Tunggu biasanya digunakan untuk interaksi antara utas, tidur biasanya digunakan untuk menjeda pelaksanaan, dan kaedah hasil() menyebabkan utas semasa melepaskan pemilikan CPU.
Urutan menunggu menggunakan notify/notifyAll() untuk bangun.
ThreadLocal ialah pembolehubah khas dalam Java. ThreadLocal menyediakan salinan pembolehubah untuk setiap utas, supaya setiap utas tidak mengakses objek yang sama pada masa tertentu, sekali gus mengasingkan perkongsian data data oleh berbilang utas.
Dari segi pelaksanaan dalaman, setiap utas mempunyai ThreadLocalMap di dalamnya, yang digunakan untuk menyimpan salinan pembolehubah yang dimiliki oleh setiap utas.
Semasa proses pembangunan, penggunaan rasional kumpulan benang boleh membawa 3 faedah.
Pertama: Kurangkan penggunaan sumber.
Kedua: Tingkatkan kelajuan tindak balas.
Ketiga: Tingkatkan kebolehurusan benang.
boleh dilaksanakan menggunakan kaedah gabungan.
Pembelajaran yang disyorkan: "tutorial video java"
Atas ialah kandungan terperinci Ringkaskan dan susun soalan temu bual benang Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!