Jadual Kandungan
Penerangan Fungsi
Proses umum
Analisis kod sumber
Pelaksanaan TransferQueue mod adil
Rumah Java javaTutorial Apakah SynchronousQueue dalam java

Apakah SynchronousQueue dalam java

Apr 30, 2023 pm 01:04 PM
java synchronousqueue

Penerangan Fungsi

Untuk memahami SynchronousQueue, anda mesti terlebih dahulu mengetahui fungsinya Hanya dengan mengetahui tujuan kelas ini dan fungsi yang disediakannya, anda tidak akan tersesat apabila membaca sumbernya kod.

Dalam kajian kami sebelum ini, jika utas ingin menukar data, mereka biasanya menggunakan pembolehubah awam atau baris gilir penyekat segerak, utas pengeluar menetapkan pembolehubah atau meletakkan nilai ke dalam baris gilir, dan pengguna Benang membaca pembolehubah atau ambil daripada baris gilir.

SynchronousQueue tidak perlu menyimpan data yang ditukar antara benang Ia berfungsi lebih seperti pemadan untuk memadankan pengeluar dan pengguna satu demi satu.

Proses umum

Sebagai contoh, apabila benang memanggil kaedah put dan mendapati tiada benang ambil dalam baris gilir, benang put akan menyekat ambil benang masuk, didapati Jika terdapat benang put yang disekat, maka kedua-duanya akan sepadan, dan kemudian benang ambil akan memperoleh data benang put, dan tiada benang akan disekat.

Sebaliknya, utas yang memanggil kaedah ambil juga akan menyekat utas Apabila utas yang memanggil kaedah put masuk, ia juga akan sepadan dengannya.

Jika benang take or put masuk dan mendapati benang take or put dari jenis yang sama disekat, maka benang akan beratur ke belakang sehingga benang jenis lain masuk dan sepadan dengan salah satu utas .

Melalui penerangan proses, saya percaya bahawa saya mempunyai pemahaman tertentu tentang SynchronousQueue, dan saya juga tahu mengapa SynchronousQueue tidak perlu menyimpan elemen.

Analisis kod sumber

Dengan melihat kaedah ambil dan letak SynchronousQueue, kami mendapati bahawa kedua-duanya memanggil kaedah pemindahan pemindahan, atribut , dan atribut pemindah ialah Pemindah kelas dalaman statik Abstrak bagi SynchronousQueue. Pemindah mempunyai dua subkelas, TransferQueue dan TransferStack;

Dalam kaedah pembina SynchronousQueue, adil parameter yang diluluskan digunakan untuk menentukan sama ada untuk mencipta TransferQueue atau TransferStack Menurut parameter fair, TransferQueue hendaklah dalam mod adil TransferStack ialah mod tidak berfungsi.

Pelaksanaan TransferQueue mod adil

Pertama sekali, ia mempunyai QNode kelas dalaman Melalui analisis di atas, didapati mungkin terdapat berbilang pengguna atau berbilang pengeluar , dan mereka akan Membentuk baris gilir, dan QNode ialah senarai terpaut yang digunakan untuk membentuk baris gilir.

QNode terutamanya mempunyai empat atribut:

QNode seterusnya: mewakili nod seterusnya

Item objek di sini sebenarnya adalah data put, nod yang dihasilkan oleh kaedah ambil Di sini; is null;

Thread waiter; Benang yang disekat biasanya disekat oleh thread yang menghasilkan nod ini akan bangun selepas mendapat data

boolean isData: true bermaksud put generation ; false bermaksud ia dijana oleh ambil;

Memandangkan kedua-dua take dan put bergantung pada kaedah pemindahan, mari kita lihat pelaksanaan pemindahan terlalu panjang jadi saya tidak akan siarkan pada carta alir diringkaskan:

Apakah SynchronousQueue dalam java

Oleh kerana kaedah ini tidak menggunakan kunci untuk kawalan, masih terdapat banyak pertimbangan dalam keseluruhan proses Ini adalah yang utama dan proses utama.

Untuk menerangkan secara ringkas, keseluruhan proses bergantung pada senarai terpaut QNode isData of QNode membezakan kaedah take or put IsData bagi nod dalam senarai terpaut mestilah sama daripada QNode ialah urutan ambil dan letak Data yang ditukar, kecuali data yang ditukar dengan kaedah ambil adalah batal.

Dapat dilihat bahawa setiap kali ia boleh dipadankan, nod paling hadapan diambil dan data dikembalikan.

TransferStack mod tidak adil

Begitu juga TransferStack juga mempunyai struktur senarai terpaut yang dipanggil SNode Atribut utama SNode adalah seperti berikut:

SNode seterusnya: nod seterusnya;

Snod padan:

Nod yang berjaya dipadankan;

Pelayan thread:

Item objek: nilai yang akan diberikan ;

mod int: klasifikasi nod, digunakan untuk membezakan put atau take;

turut menyusun carta aliran kod sumber, seperti yang ditunjukkan di bawah:

Apakah SynchronousQueue dalam java

Ia juga dilaksanakan menggunakan senarai terpaut, tetapi yang ini mempunyai struktur yang berbeza Terdapat padanan tambahan untuk mewakili nod yang sepadan.

Melalui proses, anda boleh melihat bahawa mod mempunyai tiga nilai Selain 0 dan 1, terdapat juga 2 untuk mewakili nod yang dipadankan. Terutamanya dalam bahagian kotak merah dalam gambar di atas, apabila

mendapati bahawa nod kepala tidak sedang berjalan, benang semasa akan mencipta nod yang sepadan, kemudian menambahnya pada kepala, dan akhirnya memadankannya dengan nod berikut .

Jika padanan ditemui, nod yang sepadan akan dialih keluar daripada senarai terpaut.

Melalui analisis proses, dapat dilihat bahawa

TransferStack diletakkan di kepala utas yang masuk kemudian, dan akan dipadankan dahulu .

Atas ialah kandungan terperinci Apakah SynchronousQueue dalam java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

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

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

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

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

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

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

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

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

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

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

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.

Program Java untuk mencari kelantangan kapsul Program Java untuk mencari kelantangan kapsul Feb 07, 2025 am 11:37 AM

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

Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Oct 13, 2024 pm 01:32 PM

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.

See all articles