


Apakah mata pengetahuan yang berkaitan tentang soalan wawancara benang Java?
1. Apakah perbezaan antara kaedah biasa yang diubah suai disegerakkan dan kaedah statik? Apakah 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 yang 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.
Benang 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 adalah satu variasi pelaksanaan kunci baris gilir CLH. Ia boleh mencapai 2 kaedah penyegerakan: eksklusif dan dikongsi.
Cara utama 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, dll.
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 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?
Pengenalan teknologi seperti kunci putaran, kunci putaran adaptif, penyingkiran kunci, penguncian kasar, kunci berat sebelah, kunci ringan, analisis melarikan diri dan teknologi lain 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:
Penghapusan Penyegerakan: Penghapusan penyegerakan, jika objek tidak akan terlepas dari benang, langkah penyegerakan untuk pembolehubah ini boleh dihapuskan.
Penghapusan kunci dan penghapusan kunci kasar: Penyusun masa jalan mesin maya mengesan bahawa data yang dikongsi tidak boleh berlaku pada beberapa kod yang memerlukan penyegerakan pada masa jalankan 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 yang 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
-
memperuntukkan ruang memori
-
Instan Objek Instan
-
Tunjuk contoh rujukan ke ruang ingatan yang diperuntukkan. instance mempunyai alamat memori dan bukan lagi null, dengan itu memastikan bahawa instance tersebut adalah sama ada null 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 menggunakannya dalam bentuk blok yang disegerakkan Ia terutamanya memastikan bahawa beberapa utas hanya boleh mempunyai satu utas dalam kaedah atau blok disegerakkan pada masa yang sama 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. Satu benang boleh ditetapkan sebagai benang Daemon dengan memanggil Thread.setDaemon(true). Kami biasanya tidak menggunakannya Sebagai contoh, benang kutipan sampah ialah benang Daemon.
Benang dihentikan: Sama ada pelaksanaan larian selesai, atau pengecualian yang tidak dikendalikan dilemparkan, 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 ialah apabila utas lain mengganggu benang A tertentu dengan memanggil kaedah interrupt()nya Benang yang terganggu menentukan sama ada ia telah diganggu melalui kaedah thread isInterrupted(), atau ia boleh dipanggil Kaedah statik Thread.interrupted. () digunakan untuk menentukan sama ada utas semasa terganggu, tetapi Thread.interrupted() juga akan menulis semula bit bendera gangguan kepada false.
12. Perbezaan antara tidur, menunggu dan mengalah.
kaedah hasil(): menyebabkan urutan semasa melepaskan pemilikan CPU, tetapi masa untuk menyerah tidak boleh ditetapkan. Sumber kunci tidak akan dikeluarkan. Semua utas yang melaksanakan yield() boleh dipilih semula oleh sistem pengendalian dan dilaksanakan serta-merta selepas memasuki keadaan sedia.
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 tunggu menggunakan notify/notifyAll() untuk bangun.
13. Adakah tidur boleh terganggu?
tidur itu sendiri menyokong gangguan Jika benang terganggu semasa tidur, pengecualian gangguan akan dilemparkan.
14. Kitaran hayat benang.
Status utas di Java dibahagikan kepada 6 jenis:
Awal (BARU): Objek utas baharu dicipta, tetapi kaedah mula() belum telah 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).
Tamat masa menunggu (TIMED_WAITING): Keadaan ini berbeza daripada MENUNGGU, ia boleh kembali dengan sendirinya selepas masa yang ditetapkan.
DITAMATKAN: Menunjukkan bahawa urutan telah menyelesaikan pelaksanaan.
15.
ThreadLocal ialah pembolehubah khas dalam Java. ThreadLocal menyediakan salinan pembolehubah untuk setiap utas, supaya setiap utas tidak mengakses objek yang sama pada masa tertentu, dengan itu 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 terdapat lebih sedikit utas yang sedang dijalankan daripada corePoolSize, buat urutan baharu untuk melaksanakan tugasan (perhatikan bahawa melakukan langkah ini memerlukan mendapatkan kunci global).
Jika urutan yang sedang berjalan 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, tugas itu 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.
Atas ialah kandungan terperinci Apakah mata pengetahuan yang berkaitan tentang soalan wawancara 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

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.
