Ringkaskan dan susun soalan temu bual benang Java
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"
1 kaedah Perbezaan? Apakah itu keterlihatan?
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.
2. Apakah kategori kunci?
3. Prinsip pengaturcaraan tanpa kunci CAS.
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.
4. Prinsip Pelaksanaan ReentrantLock.
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.
5. Prinsip AQS.
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.
6. Prinsip Disegerakkan dan perbezaan daripada ReentrantLock.
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.
7. Apakah pengoptimuman yang telah Disegerakkan?
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.
- Analisis melarikan diri: Jika terbukti bahawa objek tidak akan melarikan diri di luar kaedah atau benang, pembolehubah ini boleh dioptimumkan:
- Disegerakkan penyingkiran : penyegerakan Penghapusan, jika objek tidak akan melarikan diri daripada benang, langkah penyegerakan untuk pembolehubah ini boleh dihapuskan.
- Penghapusan kunci dan penghapusan kunci kasar: Jika pengkompil masa jalan mesin maya mengesan bahawa persaingan data kongsi tidak mungkin berlaku pada sesetengah kod yang memerlukan penyegerakan semasa masa jalan, ia akan mengalih keluar Kunci ini .
- Mengasar kunci: Gabungkan blok kod bersebelahan dengan kunci yang sama. Menghapuskan pemerolehan dan pelepasan kunci yang tidak bermakna boleh meningkatkan prestasi menjalankan program.
8. Perbezaan dan skop kunci statik dan bukan statik disegerakkan.
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.
9. Bolehkah tidak menentu menjamin keselamatan benang? Apakah yang dilakukan pada DCL?
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
- Peruntukkan ruang memori
- Segera contoh objek
- Halakan rujukan tika ke ruang memori yang diperuntukkan Pada masa ini, tika itu mempunyai alamat memori dan tidak lagi batal . , dengan itu memastikan contoh itu adalah sama ada batal atau objek yang dimulakan sepenuhnya.
10. Apakah perbezaan antara tidak menentu dan segerak?
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.
11. Apakah benang daemon? Bagaimanakah anda keluar dari satu utas?
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.
- Awal (BARU): Objek utas baharu dicipta, tetapi kaedah mula() belum dipanggil lagi .
- Run (RUNNABLE): Dalam benang Java, dua keadaan sedia dan berjalan biasanya dipanggil "berjalan". Selepas objek utas dicipta, utas lain (seperti utas utama) memanggil kaedah mula() objek. Benang dalam keadaan ini terletak dalam kumpulan benang boleh jalan, menunggu untuk dipilih mengikut penjadualan benang untuk mendapatkan hak untuk menggunakan CPU Ia berada dalam keadaan sedia pada masa ini. Benang dalam keadaan sedia berubah kepada keadaan berjalan (berjalan) selepas memperoleh kepingan masa CPU.
- DISEKAT: Menunjukkan bahawa benang disekat dalam kunci.
- Menunggu: Urutan yang memasuki keadaan ini perlu menunggu urutan lain untuk mengambil beberapa tindakan tertentu (pemberitahuan atau gangguan).
- Waiting tamat masa (TIMED_WAITING): Keadaan ini berbeza daripada WAITING, ia boleh kembali dengan sendirinya selepas masa yang ditentukan.
- DITAMATKAN: Menunjukkan bahawa urutan telah menyelesaikan pelaksanaan.
15. Apakah itu ThreadLocal?
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.
16. Prinsip asas kumpulan benang.
Semasa proses pembangunan, penggunaan rasional kumpulan benang boleh membawa 3 faedah.
Pertama: Kurangkan penggunaan sumber.
Kedua: Tingkatkan kelajuan tindak balas.
Ketiga: Tingkatkan kebolehurusan benang.
- Jika pada masa ini terdapat lebih sedikit urutan berjalan daripada corePoolSize, buat urutan baharu untuk melaksanakan tugasan (perhatikan bahawa melakukan langkah ini memerlukan memperoleh kunci global).
- Jika urutan yang sedang berjalan adalah sama dengan atau lebih daripada corePoolSize, tambahkan tugasan pada BlockingQueue.
- Jika tugasan tidak boleh ditambahkan pada BlockingQueue (baris gilir penuh), cipta urutan baharu untuk memproses tugasan.
- Jika membuat utas baharu akan menyebabkan utas yang sedang berjalan melebihi maksimumPoolSize, tugasan akan ditolak dan kaedah RejectedExecutionHandler.rejectedExecution() akan dipanggil.
17 Terdapat tiga utas T1, T2, dan T3 Bagaimana untuk memastikan ia dilaksanakan mengikut urutan.
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.
