Bagaimana Menjalankan Banyak Utas Secara Bersamaan di Java? Pendekatan Layanan Pelaksana

Diterbitkan: 2021-10-09
Bagaimana Menjalankan Banyak Utas Secara Bersamaan di Java? Pendekatan Layanan Pelaksana

Mari kita lihat contoh ini lagi: Bagaimana cara mendapatkan Status Ping dari Titik Akhir HTTP di Java?

Pernahkah Anda memperhatikan eksekusi utas untuk contoh itu? Ini berurutan. What if you have 500 endpoints? Saya yakin Anda harus menunggu setidaknya 5 menit untuk mendapatkan hasil. Yang saya yakin bukan solusi terbaik.

Sekarang apa? Pertanyaan yang benar akan menjadi:

  • Bagaimana cara menjalankan beberapa utas secara bersamaan?
  • Bagaimana cara mengimplementasikan banyak utas di Jawa?
  • Bagaimana cara menjalankan utas yang berbeda di Jawa?
  • Java – Dimana Tutorial Pemrograman Multithreading?
  • Thread: Bagaimana cara menggunakan banyak utas untuk mempercepat pemrosesan?

ExecutorService Approach adalah jawaban Anda.

Pelaksana yang menyediakan metode untuk mengelola penghentian dan metode yang dapat menghasilkan Masa Depan untuk melacak kemajuan satu atau lebih tugas asinkron.

ExecutorService dapat dimatikan, yang akan menyebabkannya menolak tugas baru. Dua metode berbeda disediakan untuk mematikan ExecutorService. Metode shutdown() akan memungkinkan tugas yang dikirimkan sebelumnya untuk dieksekusi sebelum diakhiri, sedangkan metode shutdownNow() mencegah tugas yang menunggu dimulai dan mencoba untuk menghentikan tugas yang sedang dijalankan.

Setelah penghentian, seorang pelaksana tidak memiliki tugas yang secara aktif dijalankan, tidak ada tugas yang menunggu eksekusi, dan tidak ada tugas baru yang dapat diajukan. ExecutorService yang tidak digunakan harus dimatikan untuk memungkinkan reklamasi sumber dayanya.

Metode submit extends base method Executor.execute ( java.lang.Runnable ) dengan membuat dan mengembalikan Future yang dapat digunakan untuk membatalkan eksekusi dan/atau menunggu penyelesaian. Metode invokeAny dan invokeAll melakukan bentuk eksekusi massal yang paling umum berguna, mengeksekusi kumpulan tugas dan kemudian menunggu setidaknya satu, atau semua, untuk menyelesaikan. (Class ExecutorCompletionService dapat digunakan untuk menulis varian khusus dari metode ini.)

Kelas Executors menyediakan metode pabrik untuk layanan eksekutor yang disediakan dalam paket ini.

  • java – ExecutorService, bagaimana cara menunggu semua tugas selesai?
  • Panduan untuk Java ExecutorService
  • Java Thread Pool – Penjelasan ExecutorService

Di bawah ini adalah Contoh Java sederhana yang menjelaskan usage of ExecutorService .

Keluaran:

Sekarang checkout hasilnya.

Seharusnya hanya dalam hitungan detik. Saya harap kamu terbantu dengan hal ini. Coba jalankan ini lebih dari satu kali dan Anda mungkin melihat hasil yang berbeda karena semua utas dieksekusi secara paralel dan siapa pun yang mendapatkan hasil cepat, Anda akan melihat hasil diposting di konsol Eclipse.

Beri tahu saya untuk pertanyaan apa pun.