Titik pengetahuan pengaturcaraan serentak untuk pembelajaran benang Java
Artikel ini membawa anda pengetahuan yang berkaitan tentang java, yang terutamanya mengatur isu yang berkaitan dengan pengaturcaraan serentak, termasuk model memori Java, penjelasan terperinci tentang tidak menentu dan prinsip pelaksanaan disegerakkan, dsb. Mari kita lihat bersama-sama, saya harap ia akan membantu semua orang.
Pembelajaran yang disyorkan: "tutorial video java"
1. Asas JMM - prinsip komputer
Memori Java Modelnya ialah Java Memory Model, atau singkatannya JMM. JMM mentakrifkan cara Mesin Maya Java (JVM) berfungsi dalam memori komputer (RAM). JVM ialah keseluruhan model maya komputer, jadi JMM bergabung dengan JVM. Versi Java1.5 telah memfaktorkannya semula, dan Java semasa masih menggunakan versi Java1.5. Masalah yang dihadapi oleh Jmm adalah sama seperti yang dihadapi dalam komputer moden.
Masalah concurrency dalam komputer fizikal Masalah concurrency yang dihadapi oleh mesin fizikal mempunyai banyak persamaan dengan situasi dalam mesin maya Skim pengendalian concurrency mesin fizikal juga mempunyai kepentingan rujukan yang besar untuk pelaksanaan mesin maya.
Menurut "Laporan Jeff Dean di Google All-Engineering Conference" kita dapat melihat bahawa
Apabila komputer melakukan beberapa operasi asas biasa kita, masa tindak balas diperlukan adalah Tidak sama.
Kes berikut adalah untuk ilustrasi sahaja dan tidak mewakili situasi sebenar.
Jika 1M data int dibaca daripada memori dan terkumpul oleh CPU, berapa lama masa yang diperlukan?
Lakukan pengiraan mudah untuk data 1M, jenis int dalam Java ialah 32 bit dan 4 bait Terdapat sejumlah 1024*1024/4 = 262144 integer ialah: 262144 0.6 = 157286 Nanosaat, dan kami tahu bahawa ia mengambil masa 250,000 nanosaat untuk membaca data 1M dari memori Walaupun terdapat jurang antara keduanya (sudah tentu, jurangnya tidak kecil, seratus ribu nanosaat adalah masa yang cukup untuk CPU melaksanakan hampir dua. ratus ribu arahan), tetapi ia masih dalam susunan magnitud. Walau bagaimanapun, tanpa sebarang mekanisme caching, ini bermakna setiap nombor perlu dibaca dari memori Selain itu, ia mengambil masa 100 nanosaat untuk CPU membaca memori sekali masa pengiraan mengambil masa 262144100 250000 = 26 464 400 nanosaat, iaitu perbezaan dalam susunan magnitud.
Dan pada hakikatnya, kebanyakan tugas pengkomputeran tidak dapat diselesaikan dengan hanya "pengkomputeran" oleh pemproses Pemproses mesti sekurang-kurangnya berinteraksi dengan memori, seperti membaca data pengkomputeran, menyimpan hasil pengkomputeran, dsb. I/ ini. Operasi O pada dasarnya mustahil untuk dihapuskan (tidak boleh bergantung pada daftar sahaja untuk menyelesaikan semua tugas pengkomputeran). Kelajuan CPU dan memori dalam komputer awal adalah hampir sama, tetapi dalam komputer moden, kelajuan arahan CPU jauh melebihi kelajuan akses memori Memandangkan terdapat jurang beberapa pesanan magnitud antara peranti storan komputer dan kelajuan pengkomputeran pemproses, komputer moden Sistem komputer perlu menambah lapisan cache (Cache) dengan kelajuan baca dan tulis sedekat mungkin dengan kelajuan operasi pemproses sebagai penampan antara memori dan pemproses: data yang diperlukan untuk operasi disalin ke cache supaya operasi boleh Teruskan dengan cepat, dan apabila operasi selesai, ia disegerakkan kembali ke memori daripada cache, supaya pemproses tidak perlu menunggu memori membaca dan menulis perlahan.
Dalam sistem komputer, daftar ialah cache tahap L0, diikuti oleh L1, L2, L3 (diikuti memori, setempat cakera, storan jauh). Ruang storan cache yang lebih jauh ke atas adalah lebih kecil, kelajuan lebih cepat, dan kos lebih tinggi ruang storan di bawah lebih besar, kelajuan lebih perlahan, dan kos lebih rendah; Dari atas ke bawah, setiap lapisan boleh dianggap sebagai cache lapisan seterusnya, iaitu: daftar L0 ialah cache bagi cache peringkat pertama L1, L1 ialah cache bagi L2, dan seterusnya; setiap lapisan berasal dari Lapisan di bawahnya, jadi data setiap lapisan ialah subset data lapisan seterusnya.
Pada CPU moden, secara amnya, L0, L1, L2 dan L3 disepadukan di dalam CPU, dan L1 juga dibahagikan kepada cache data peringkat pertama (Data Cache, D -Cache, L1d) dan cache arahan peringkat pertama (Cache Arahan, I-Cache, L1i), yang digunakan untuk menyimpan data dan melaksanakan penyahkodan arahan data masing-masing. Setiap teras mempunyai unit pemprosesan pengkomputeran bebas, pengawal, daftar, cache L1 dan L2, dan kemudian berbilang teras CPU berkongsi lapisan terakhir cache CPU L3.
2. Model Memori Java (JMM)
Dari sudut pandangan abstrak, JMM mentakrifkan hubungan abstrak antara utas dan ingatan utama: pembolehubah yang dikongsi antara utas disimpan dalam memori utama (Memori Utama ), setiap satu thread mempunyai memori tempatan peribadi (Memori Tempatan), yang menyimpan salinan pembolehubah kongsi baca/tulis benang. Memori tempatan ialah konsep abstrak JMM dan tidak benar-benar wujud. Ia meliputi cache, penimbal tulis, daftar, dan pengoptimuman perkakasan dan pengkompil lain.
2.1 Keterlihatan
Keterlihatan bermakna apabila berbilang benang mengakses pembolehubah yang sama, benang Jika nilai ini pembolehubah diubah suai, benang 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.2.
Kita semua tahu bahawa sumber CPU diperuntukkan dalam unit benang dan dipanggil dalam cara perkongsian masa Sistem pengendalian membenarkan proses untuk dilaksanakan untuk tempoh masa yang singkat, seperti 50 milisaat sistem pengendalian akan memilih semula proses untuk dilaksanakan (kami memanggilnya "penukaran tugas"), 50 milisaat ini dipanggil "kepingan masa". Kebanyakan tugasan ditukar selepas segmen masa tamat. Oleh kerana sistem pengendalian melakukan penukaran tugas, ia boleh berlaku selepas sebarang arahan CPU dilaksanakan! Ambil perhatian bahawa ia adalah arahan CPU, arahan CPU, arahan CPU, bukan pernyataan dalam bahasa peringkat tinggi. Sebagai contoh, kiraan hanyalah satu ayat dalam Java, tetapi dalam bahasa peringkat tinggi, pernyataan sering memerlukan beberapa arahan CPU untuk diselesaikan. Malah, kiraan mengandungi sekurang-kurangnya tiga arahan CPU!
3. Penjelasan terperinci tentang volatile那么线程切换为什么会带来 bug 呢?
3.1 Ciri-ciri tidak menentu
Anda boleh menganggap satu
untuk pembolehubah tidak menentu sebagai menggunakan kunci yang sama untuk mengunci single iniOperasi disegerakkan
读/写
读/写
boleh dilihat sebagai kod berikut:
public class Volati { // 使用volatile 声明一个64位的long型变量 volatile long i = 0L;// 单个volatile 变量的读 public long getI() { return i; }// 单个volatile 变量的写 public void setI(long i) { this.i = i; }// 复合(多个)volatile 变量的 读/写 public void iCount(){ i ++; }}
Jadi pembolehubah yang tidak menentu itu sendiri mempunyai ciri-ciri berikut:
public class VolaLikeSyn { // 使用 long 型变量 long i = 0L; public synchronized long getI() { return i; }// 对单个的普通变量的读用同一个锁同步 public synchronized void setI(long i) { this.i = i; }// 普通方法调用 public void iCount(){ long temp = getI(); // 调用已同步的读方法 temp = temp + 1L; // 普通写操作 setI(temp); // 调用已同步的写方法 }}
Keterlihatan
: Bacaan daripada pembolehubah tidak menentu sentiasa boleh melihat (mana-mana utas) tulisan terakhir kepada pembolehubah tidak menentu.- Atomicity: Membaca/menulis mana-mana pembolehubah meruap tunggal adalah atom, tetapi operasi kompaun seperti meruap bukan atom.
- Walaupun tidak menentu boleh memastikan pembolehubah dialihkan ke memori utama dalam masa selepas pelaksanaan, untuk kiraan, situasi bukan atom, berbilang arahan, disebabkan penukaran benang, benang A baru sahaja memuatkan kiraan =0 Selepas mencapai memori kerja, utas B boleh mula berfungsi Ini akan menyebabkan hasil pelaksanaan utas A dan B menjadi kedua-duanya 1, dan kedua-duanya ditulis ke ingatan utama masih 1, bukan 2 3.2 , Prinsip pelaksanaan tidak menentu
- Pada masa yang sama, arahan ini akan menulis data baris cache pemproses semasa terus ke memori sistem, dan operasi menulis ini akan membatalkan data yang dicache pada alamat ini dalam CPU lain.
- 4. Prinsip pelaksanaan disegerakkan
- Pelaksanaan Disegerakkan dalam JVM adalah berdasarkan masuk dan keluar dari objek Monitor untuk mencapai penyegerakan kaedah dan penyegerakan blok kod, walaupun khusus butiran pelaksanaan adalah berbeza, tetapi semuanya boleh dicapai melalui pasangan arahan MonitorEnter dan MonitorExit.
- Jika nombor kemasukan monitor ialah 0, maka benang memasuki monitor, dan kemudian menetapkan nombor masukan kepada 1, dan benang menjadi pemilik monitor.
- Jika utas sudah menduduki monitor dan baru masuk semula, bilangan entri ke dalam monitor ditambah sebanyak 1.
- Jika utas lain telah menduduki monitor, utas akan memasuki keadaan menyekat sehingga nombor kemasukan monitor ialah 0, dan kemudian cuba mendapatkan pemilikan monitor sekali lagi. Untuk kaedah penyegerakan, berdasarkan keputusan penyahkompilasi kaedah penyegerakan, penyegerakan kaedah tidak dilaksanakan melalui arahan monitorenter dan monitorexit Berbanding dengan kaedah biasa, kolam malar mempunyai pengecam ACC_SYNCHRONIZED tambahan.
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.
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.
Kunci yang digunakan oleh disegerakkan disimpan dalam pengepala objek Java Pengepala objek objek Java terdiri daripada dua bahagian: tanda perkataan dan penunjuk kelas:
- tanda. kata menyimpan Status penyegerakan, bendera, kod cincang, status GC, dsb.
- penunjuk kelas menyimpan penunjuk jenis objek, yang menunjuk ke metadata kelasnya Selain itu, untuk tatasusunan, terdapat juga data yang merekodkan panjang tatasusunan.
Maklumat kunci wujud dalam kata tanda objek Data lalai dalam MarkWord adalah untuk menyimpan Kod Hash dan maklumat lain objek.
Tetapi ia akan berubah apabila operasi objek berubah keadaan kunci yang berbeza sepadan dengan kaedah penyimpanan rekod yang berbeza
tiada status kunci, status kunci berat sebelah, status kunci ringan dan status kunci kelas berat , ia akan beransur-ansur meningkat dengan situasi persaingan. Kunci boleh dinaik taraf tetapi tidak diturunkan untuk meningkatkan kecekapan memperoleh dan melepaskan kunci.
4.2. Kunci berat sebelahMemperkenalkan latar belakang: Dalam kebanyakan kes, kunci bukan sahaja tidak mempunyai persaingan berbilang benang, tetapi ia sentiasa diperoleh beberapa kali oleh benang yang sama. Untuk membolehkan benang Kos memperoleh kunci adalah lebih rendah dan kunci berat sebelah diperkenalkan untuk mengurangkan operasi CAS yang tidak perlu. Kunci berat sebelah, seperti namanya, ia akan memihak kepada utas pertama untuk mengakses kunci Jika hanya satu utas mengakses kunci penyegerakan semasa operasi dan tiada perbalahan berbilang utas, utas tidak perlu mencetuskan penyegerakan. , Kurangkan beberapa operasi CAS mengunci/membuka kunci (seperti beberapa operasi CAS menunggu baris gilir dalam kes ini, kunci berat sebelah akan ditambahkan pada urutan). Jika benang lain mendahului kunci semasa operasi, benang yang memegang kunci berat sebelah akan digantung, dan JVM akan menghapuskan kunci berat sebelah padanya dan memulihkan kunci kepada kunci ringan standard. Ia meningkatkan lagi prestasi berjalan program dengan menghapuskan primitif penyegerakan apabila tiada persaingan untuk sumber.
Lihat gambar di bawah untuk memahami proses pemerolehan kunci bias:
Langkah 2. Jika ia berada dalam keadaan biasa, uji sama ada ID utas menghala ke utas semasa Jika ya, pergi ke langkah 5, jika tidak pergi ke langkah 3.
Langkah 3. Jika ID benang tidak menghala ke benang semasa, bersaing untuk mendapatkan kunci melalui operasi CAS. Jika pertandingan berjaya, tetapkan ID utas dalam Mark Word kepada ID utas semasa, dan kemudian jalankan 5 jika pertandingan gagal, jalankan 4;
Langkah 4. Jika CAS gagal memperoleh kunci bias, ini bermakna terdapat persaingan. Apabila mencapai titik selamat global (safepoint), benang yang memperoleh kunci pincang digantung, kunci pincang dinaik taraf kepada kunci ringan, dan kemudian benang yang disekat di titik selamat terus melaksanakan kod penyegerakan. (Membatalkan kunci bias akan menyebabkan perkataan terhenti)
Langkah 5. Jalankan kod penyegerakan.
Pelepasan kunci bias:
Pembatalan kunci berat sebelah disebut dalam langkah keempat di atas. Kunci bias hanya akan melepaskan kunci bias apabila benang lain cuba bersaing untuk kunci bias. Benang yang memegang kunci bias tidak akan mengambil inisiatif untuk melepaskan kunci bias. Untuk membatalkan kunci berat sebelah, anda perlu menunggu titik keselamatan global (tiada kod bait sedang dilaksanakan pada masa ini Ia akan menjeda benang yang memiliki kunci berat sebelah, tentukan sama ada objek kunci berada dalam keadaan terkunci). , dan kemudian pulihkan kunci berat sebelah kepada keadaan sebelumnya selepas membatalkan kunci berat sebelah Status kunci (bit bendera ialah "01") atau kunci ringan (bit bendera ialah "00").
Senario terpakai untuk kunci berat sebelah:
Sentiasa hanya ada satu utas yang melaksanakan blok penyegerakan Sebelum ia selesai melaksanakan dan melepaskan kunci, tiada utas lain akan melaksanakannya blok penyegerakan. Gunakannya apabila tiada persaingan untuk kunci Apabila terdapat persaingan, ia akan ditingkatkan kepada kunci ringan Apabila menaik taraf kepada kunci ringan, anda perlu membatalkan kunci bias hentikan operasi perkataan;
dalam Apabila berlaku persaingan kunci, kunci berat sebelah akan melakukan banyak operasi tambahan Terutama apabila membatalkan kunci berat sebelah, ia akan membawa kepada titik selamat akan menyebabkan stw kemerosotan prestasi. Dalam kes ini, ia harus dilumpuhkan.
jvm Hidupkan/matikan kunci pincang
Hidupkan kunci pincang: -XX: UseBiasedLocking -XX:BiasedLockingStartupDelay=0 Matikan kunci pincang: -XX:-UseBiasedLocking
4.3. Kunci ringan
Kunci ringan dinaik taraf daripada kunci berat sebelah berjalan apabila satu utas memasuki blok yang disegerakkan Apabila utas kedua bergabung dengan pertikaian kunci, kunci berat sebelah Kunci akan dinaik taraf kepada kunci ringan;
Proses penguncian kunci ringan:
- Apabila kod memasuki blok penyegerakan, jika penyegerakan Status kunci objek adalah bebas kunci dan berat sebelah tidak dibenarkan (bendera kunci ialah "01", dan sama ada ia adalah kunci berat sebelah ialah "0"). simpan salinan Mark Word semasa objek kunci, yang secara rasmi dipanggil Displaced Mark Word.
- Salin Kata Tanda dalam pengepala objek ke rekod kunci.
- Selepas salinan berjaya, mesin maya akan menggunakan operasi CAS untuk cuba mengemas kini Mark Word objek kepada penunjuk ke Rekod Kunci dan arahkan penuding pemilik dalam rekod Kunci ke perkataan tanda objek . Jika kemas kini berjaya, teruskan ke langkah 4, jika tidak, teruskan ke langkah 5.
- Jika tindakan kemas kini berjaya, maka urutan ini memiliki kunci objek dan bendera kunci objek Mark Word ditetapkan kepada "00", yang bermaksud objek itu berada dalam keadaan kunci ringan
- Jika operasi kemas kini ini gagal, mesin maya akan terlebih dahulu menyemak sama ada Mark Word objek menghala ke bingkai tindanan benang semasa. Jika ya, ini bermakna benang semasa sudah memiliki kunci ini objek, dan kemudian ia boleh terus memasuki blok penyegerakan untuk meneruskan. Jika tidak, ini bermakna berbilang benang bersaing untuk kunci, maka ia akan berputar dan menunggu kunci, dan objek kunci tidak diperolehi selepas beberapa kali. Penunjuk benang heavyweight menghala ke benang bersaing, dan benang bersaing juga akan menyekat, menunggu benang ringan melepaskan kunci dan membangunkannya. Nilai status bendera kunci berubah kepada "10". Apa yang disimpan dalam Mark Word ialah penunjuk kepada kunci heavyweight (mutex), dan benang seterusnya yang menunggu kunci juga akan memasuki keadaan menyekat.
4.3.1. Prinsip kunci putaran
Prinsip kunci putaran adalah sangat mudah Jika benang yang memegang kunci boleh melepaskan sumber kunci dalam masa yang singkat, maka mereka yang menunggu untuk bersaing Benang yang memegang kunci tidak perlu bertukar antara mod kernel dan mod pengguna untuk memasuki keadaan yang disekat dan digantung Mereka hanya perlu menunggu (berpusing) dan memperoleh kunci sejurus selepas benang yang memegang kunci melepaskan kunci . Dengan cara ini, Elakkan kos menukar antara benang pengguna dan kernel.
Tetapi pemutaran benang perlu menggunakan CPU secara terang-terangan, ini bermakna CPU melakukan kerja yang tidak berguna masa.
Jika masa pelaksanaan benang yang memegang kunci melebihi masa menunggu putaran maksimum dan kunci tidak dilepaskan, benang lain yang bersaing untuk kunci masih tidak akan dapat memperoleh kunci dalam masa menunggu maksimum , benang perbalahan akan Berhenti berputar dan memasuki keadaan menyekat.
4.3.2. Kebaikan dan Kelemahan Kunci Putaran
Kunci putaran mengurangkan sekatan benang sebanyak mungkin, bermakna persaingan untuk kunci tidak sengit dan masa kunci adalah sangat singkat. Dari segi prestasi, prestasi bertambah baik, kerana penggunaan putaran akan kurang daripada penggunaan operasi menyekat dan menggantung benang.
Tetapi jika persaingan untuk kunci adalah sengit, atau benang yang memegang kunci perlu menduduki kunci untuk masa yang lama untuk melaksanakan blok penyegerakan, adalah tidak sesuai untuk menggunakan kunci putaran pada masa ini, kerana putaran kunci sentiasa menduduki CPU sebelum memperoleh kunci Ia adalah kerja yang sia-sia dan menduduki lubang Penggunaan pemutaran benang adalah lebih besar daripada penggunaan operasi menyekat dan menggantung benang lain yang memerlukan cawan, mengakibatkan pembaziran daripada CPU.
4.3.3. Ambang masa kunci putaran
Tujuan kunci putaran adalah untuk menduduki sumber CPU tanpa melepaskannya, dan tunggu sehingga kunci diperoleh untuk memprosesnya dengan segera. Tetapi bagaimana untuk memilih masa pelaksanaan putaran? Jika masa pelaksanaan putaran terlalu lama, sejumlah besar benang akan berada dalam keadaan putaran dan menduduki sumber CPU, yang akan menjejaskan prestasi keseluruhan sistem. Jadi bilangan putaran adalah penting.
JVM Untuk pilihan bilangan putaran, jdk1.5 lalai kepada 10 kali Dalam 1.6, kunci putaran adaptif telah diperkenalkan bermakna masa putaran tidak lagi ditetapkan, tetapi ditentukan oleh putaran sebelumnya kunci. Ia ditentukan oleh masa putaran pada kunci yang sama dan status pemilik kunci Pada asasnya dianggap bahawa masa penukaran konteks bagi sesuatu utas adalah masa terbaik.
JDK1.6 medium-XX: UseSpinning menghidupkan kunci spin; selepas JDK1.7, parameter ini dialih keluar dan dikawal oleh jvm; 🎜>
4.3.4. Perbandingan kunci yang berbeza
Pembelajaran yang disyorkan: "
tutorial video java"
Atas ialah kandungan terperinci Titik pengetahuan pengaturcaraan serentak untuk pembelajaran 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

AI Hentai Generator
Menjana ai hentai secara percuma.

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 Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

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
