Rumah > Java > javaTutorial > teks badan

Ringkaskan dan susun soalan temu bual benang Java

WBOY
Lepaskan: 2022-06-29 15:15:54
ke hadapan
1621 orang telah melayarinya

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.

Ringkaskan dan susun soalan temu bual benang Java

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?

Ringkaskan dan susun soalan temu bual 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.

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

  1. Peruntukkan ruang memori
  2. Segera contoh objek
  3. 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.

12 Perbezaan antara tidur, menunggu dan mengalah.

Kaedah yield(): 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 menunggu 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 Jawa terbahagi kepada 6 jenis:

    Awal (BARU): Objek utas baharu dicipta, tetapi kaedah mula() belum dipanggil lagi .
  1. 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.
  2. DISEKAT: Menunjukkan bahawa benang disekat dalam kunci.
  3. Menunggu: Urutan yang memasuki keadaan ini perlu menunggu urutan lain untuk mengambil beberapa tindakan tertentu (pemberitahuan atau gangguan).
  4. Waiting tamat masa (TIMED_WAITING): Keadaan ini berbeza daripada WAITING, ia boleh kembali dengan sendirinya selepas masa yang ditentukan.
  5. DITAMATKAN: Menunjukkan bahawa urutan telah menyelesaikan pelaksanaan.

Ringkaskan dan susun soalan temu bual benang Java

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.

  1. 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).
  2. Jika urutan yang sedang berjalan adalah 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, 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!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan