Artikel ini membawa anda pengetahuan yang berkaitan tentang java terutamanya meringkaskan dan memperkenalkan lima kaedah mencipta berbilang benang, termasuk mewarisi kelas Thread, melaksanakan antara muka Boleh Dipanggil dan melaksanakan antara muka Boleh Panggil Kelas TimerTask dan mulakan berbilang benang melalui kumpulan benang saya harap ia akan membantu semua orang.
Kajian yang disyorkan: "tutorial pembelajaran java"
Lima cara untuk mencipta berbilang benang dalam Java
- Ini hanya untuk komunikasi dan pembelajaran tentang pengaturcaraan Java Jika anda mempunyai sebarang pertanyaan, sila maklumkan kepada saya. Selamat datang untuk menambah dan berkomunikasi, sila nyatakan apabila mencetak semula!
(1) Warisi kelas Thread
1. Penerangan pelaksanaan
- Dengan mewarisi Thread dan mengatasi run(), tugasan yang perlu dilakukan ditakrifkan dalam kaedah run. Subkelas yang dicipta boleh melaksanakan kaedah thread dengan memanggil kaedah start().
- Dengan mewarisi kelas thread yang dilaksanakan oleh Thread, pembolehubah contoh kelas thread tidak boleh dikongsi antara berbilang thread. Objek Thread yang berbeza perlu dicipta dan sumber secara semula jadi tidak dikongsi.
2. Langkah khusus
1) Tentukan kelas UserThread dan warisi kelas Thread
2) Gantikan kaedah run( )
3) Buat objek UserThread
4) Panggil kaedah mula( )
3. Pelaksanaan kod
4. Nota
- Sumber data tidak dikongsi dan berbilang urutan menyelesaikan tugasan mereka sendiri. Sebagai contoh, jika tiga tingkap tiket menjual tiket pada masa yang sama, dan masing-masing menjual tiket sendiri, akan ada masalah tiga tingkap tiket menjual tiket yang sama.
(2) Laksanakan antara muka Runnable
1. Penerangan pelaksanaan
- Anda perlu mentakrifkan kelas terlebih dahulu untuk melaksanakan antara muka Runnable dan mengatasi kaedah run() antara muka Kaedah run ini ialah badan pelaksanaan thread. Kemudian buat objek kelas pelaksanaan Runnable sebagai sasaran parameter untuk mencipta objek Thread ini ialah objek thread sebenar.
- Menggunakan kelas benang yang melaksanakan antara muka Runnable untuk mencipta objek boleh merealisasikan perkongsian sumber antara benang.
2. Langkah khusus
1) Tentukan kelas UserRun dan laksanakan antara muka Runnble
2) Gantikan kaedah run()
3) Buat objek kelas UserRun
4) Buat objek daripada kelas Thread, Objek kelas UserRun digunakan sebagai parameter pembina kelas Thread
5) Mulakan thread
3. Pelaksanaan kod
4. Nota
- Perkongsian sumber data, beberapa utas menyelesaikan tugas bersama-sama (berbilang utas berkongsi sumber untuk mencipta objek utas). Sebagai contoh, tiga tingkap tiket (tiga utas) menjual tiket pada masa yang sama (tiket dalam kelas MyThread), dan tiga utas menggunakan sumber bersama-sama.
(3) Laksanakan antara muka Boleh Panggil
1. Penerangan pelaksanaan
- Antaramuka Boleh Panggil adalah seperti versi antara muka Boleh Dijalankan yang ditingkatkan Kaedah panggilan() yang disediakannya akan berfungsi sebagai badan pelaksanaan utas dan membenarkan nilai pulangan.
- Objek boleh panggil tidak boleh digunakan secara langsung sebagai sasaran objek Thread, kerana antara muka Boleh Panggil ialah antara muka baharu dalam Java5 dan bukan sub-antara muka antara muka Runnable.
- Untuk penyelesaian kepada masalah ini, antara muka Masa Depan diperkenalkan antara muka ini boleh menerima nilai pulangan panggilan(). digunakan sebagai sasaran objek Thread.
2. Langkah khusus
1) Tentukan kelas UserCallable dan laksanakan antara muka Boleh Panggil
2) Gantikan kaedah panggilan()
3) Buat objek UserCallable
4) Buat subkelas FutureTask of Objek antara muka RunnableFuture, parameter pembina ialah objek UserCallable
5) Buat objek kelas Thread, parameter pembina ialah objek FutureTask
6) Mulakan utas
3. Pelaksanaan kod
4. Nota
- Perkongsian sumber data, beberapa utas menyelesaikan tugas bersama-sama (berbilang utas berkongsi sumber untuk mencipta objek utas). Sebagai contoh, tiga tingkap tiket (tiga utas) menjual tiket pada masa yang sama (tiket dalam kelas MyThread), dan tiga utas menggunakan sumber bersama-sama. Pada masa yang sama, selepas panggilan benang selesai, akan ada nilai pulangan .
(4) Warisi kelas TimerTask
1. Perihalan pelaksanaan
- Kelas pemasa Timer dan TimerTask boleh digunakan sebagai cara lain untuk melaksanakan urutan.
- Pemasa ialah kemudahan belitan yang digunakan untuk menjadualkan tugasan untuk pelaksanaan kemudian dalam urutan latar belakang. Tugasan boleh dijadualkan untuk dilaksanakan sekali atau berulang kali pada selang masa yang tetap. Ia boleh dianggap sebagai pemasa dan TimerTask boleh dijadualkan.
- TimerTask ialah kelas abstrak yang melaksanakan antara muka Runnable, jadi ia mempunyai keupayaan berbilang benang.
2. Langkah khusus
1) Tentukan kelas UserTimerTask dan warisi kelas abstrak TimerTask
2) Buat objek kelas UserTask
3) Buat objek kelas Pemasa dan tetapkan strategi pelaksanaan tugas
3. Pelaksanaan kod
4. Nota
- Urutan yang dicipta oleh kelas pemasa lebih banyak digunakan untuk pemprosesan tugas berjadual dan sumber data tidak dikongsi antara urutan dan berbilang urutan menyelesaikan tugasan mereka sendiri.
(5) Mulakan berbilang benang melalui kumpulan benang
1. Penerangan pelaksanaan
- Kumpulan benang boleh dibuat melalui kelas alat Pelaksana.
- Tingkatkan kelajuan tindak balas sistem Apabila tugasan tiba, dengan menggunakan semula utas sedia ada, ia boleh dilaksanakan serta-merta tanpa menunggu penciptaan utas baharu.
- Kurangkan penggunaan sumber sistem dan kurangkan penggunaan penciptaan dan pemusnahan benang dengan menggunakan semula benang sedia ada.
- Kawal bilangan utas serentak dengan mudah. Kerana jika benang dibuat tanpa had, ia boleh menyebabkan OOM disebabkan penggunaan memori yang berlebihan, dan boleh menyebabkan penukaran CPU yang berlebihan.
2. Kaedah pelaksanaan
1) FixThreadPool(int n) kumpulan benang saiz tetap
(1) Langkah khusus
① Cipta benang bersaiz tetap melalui Executors.newFixedThreadPool(5 ) Pool
② Tulis semula kaedah run() kelas Runnable dan gunakan kumpulan benang untuk melaksanakan tugas
③Shutdown() menutup kumpulan benang
(2) Pelaksanaan kod
(3) Nota
- Mencipta kumpulan benang bersaiz tetap boleh merealisasikan perkongsian sumber data dan berbilang benang boleh menyelesaikan tugas bersama-sama .
2) SingleThreadExecutor() single-thread pool
(1) Langkah-langkah khusus
① Buat kumpulan single-thread melalui Executors.newSingleThreadExecutor()
② Ulang Tulis kaedah run() kelas Runnable dan gunakan kumpulan benang untuk melaksanakan tugas
③Shutdown( ) menutup kumpulan benang
(2) Pelaksanaan kod
(3) Nota
- Kolam benang hanya mencipta satu urutan untuk melaksanakan tugas.
3) CachedThreadPool() kumpulan benang cache
(1) Langkah khusus
① Buat sebanyak mungkin kumpulan benang melalui Executors.newCachedThreadPool()
② Tulis semula kaedah run( ) kelas Runnable dan gunakan kumpulan benang untuk melaksanakan tugas
③ Shutdown( ) menutup kumpulan benang
(2) Pelaksanaan kod
(3) Nota
- Kaedah ini akan mencipta sebanyak mungkin urutan untuk menyelesaikan tugasan Sebagai contoh, walaupun hanya terdapat 10 tiket masuk kes itu, kumpulan benang Sekurang-kurangnya 12 benang dijana.
4) ScheduledThreadPool (int n) berjadual kumpulan benang berkala
(1) Langkah khusus
① Buat urutan teras tetap melalui Executors.newScheduledThreadPool(5) Bilangan kumpulan benang (bilangan minimum benang untuk dikekalkan, benang tidak akan dikitar semula selepas penciptaan), benang dilaksanakan secara kerap seperti yang dirancang.
② Tulis semula kaedah run( ) kelas Runnable dan gunakan kumpulan benang untuk melaksanakan tugas
③ Shutdown( ) menutup kumpulan benang
(2) Pelaksanaan kod
(3) Nota
- Buat kumpulan benang berkala untuk menyokong pelaksanaan tugas yang dijadualkan dan berkala (parameter kali pertama ialah masa tunda pelaksanaan dan parameter kedua ialah masa selang pelaksanaan) .
5) Sambungan WorkStealingPool() kelas kumpulan utas baharu ForkJoinPool
(1) Langkah khusus
① Cipta kumpulan utas melalui Executors.newWorkStealingPool()
② Tulis semula kaedah run() kelas Runnable, panggil objek kelas Runnable melalui objek kelas Thread dan gunakan kumpulan benang untuk melaksanakan tugas
③ Sleep() membenarkan utas utama menunggu kanak-kanak benang untuk menyelesaikan pelaksanaan, atau anda boleh menggunakan pembilang
④Shutdown( ) menutup kumpulan thread
(2) Pelaksanaan kod
(3) Nota
- Oleh kerana setiap utas mempunyai baris gilir tugasnya sendiri, beban CPU mungkin tidak seimbang disebabkan bilangan tugasan. Kaedah ini boleh memanfaatkan kelebihan CPU berbilang teras dengan tugasan yang lebih sedikit boleh "mencuri" tugasan daripada utas dengan lebih banyak tugas, dengan itu mengimbangi pelaksanaan tugas pada setiap CPU.
Kajian yang disyorkan: "tutorial java"
Atas ialah kandungan terperinci Lima cara! Ringkasan mencipta berbilang benang di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!