Rumah  >  Artikel  >  Java  >  Apakah mata pengetahuan yang berkaitan tentang soalan wawancara benang Java?

Apakah mata pengetahuan yang berkaitan tentang soalan wawancara benang Java?

WBOY
WBOYke hadapan
2023-04-23 23:07:061120semak imbas

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?

Apakah mata pengetahuan yang berkaitan tentang soalan wawancara benang Java?

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

  1. memperuntukkan ruang memori

  2. Instan Objek Instan

  3. 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:

  1. Awal (BARU): Objek utas baharu dicipta, tetapi kaedah mula() belum telah dipanggil lagi.

  2. 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.

  3. DISEKAT: Menunjukkan bahawa benang disekat dalam kunci.

  4. MENUNGGU: Urutan yang memasuki keadaan ini perlu menunggu urutan lain untuk mengambil beberapa tindakan tertentu (pemberitahuan atau gangguan).

  5. Tamat masa menunggu (TIMED_WAITING): Keadaan ini berbeza daripada MENUNGGU, ia boleh kembali dengan sendirinya selepas masa yang ditetapkan.

  6. DITAMATKAN: Menunjukkan bahawa urutan telah menyelesaikan pelaksanaan.

Apakah mata pengetahuan yang berkaitan tentang soalan wawancara benang Java?

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.

  1. 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).

  2. Jika urutan yang sedang berjalan sama dengan atau lebih daripada corePoolSize, tambahkan tugasan pada BlockingQueue.

  3. Jika tugasan tidak boleh ditambahkan pada BlockingQueue (baris gilir penuh), cipta urutan baharu untuk memproses tugasan.

  4. 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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam