Bagaimana Mengimplementasikan Callable Interface di Java



Artikel ini akan memberi Anda pengetahuan mendetail dan komprehensif tentang cara mengimplementasikan Callable Interface di Java dengan contoh.

Program multithreading Java menyaksikan penggunaan ekstensif Callable dan Future. Di bawah pengetahuan prasyarat tentang utas dan multi-threading, pembaca akan lebih mampu memahami diskusi di artikel ini. Seperti yang akan saya jelaskan tentang Callable Interface di Java pada artikel ini.

Rekap di Threads

Namun, izinkan saya memberikan pengantar singkat tentang konsep utas. Utas adalah jalur eksekusi yang terpisah, jika Anda perlu melakukan tugas berulang, pekerjaan dapat dipecah menjadi beberapa tugas dan menetapkannya ke utas. Multi-threadingtidak lain adalah menetapkan beberapa utas untuk menjalankan tugas yang berbeda secara paralel untuk mendapatkan hasilnya dengan cepat.





Apa itu Callable Interface di Java

Untuk Java 5, kelas 'java.util.concurrent' diperkenalkan. Antarmuka yang dapat dipanggil ini dibawa melalui paket konkurensi yang tampak mirip dengan antarmuka Runnable. Itu juga bisa mengembalikan objek apa pun dan bisa melempar Exception. Antarmuka Java Callable menggunakan Generik, sehingga memungkinkan untuk mengembalikan semua jenis objek. Kerangka Pelaksana memberikan metode submit () untuk mengeksekusi implementasi Callable di kumpulan utas. Pada kenyataannya, Java Executor Framework menganut pola WorkerThread.

java-interfaceDalam kumpulan utas, pengguna dapat memulai utas dengan menggunakan metode Executors.newFixedThreadPool (10) dan karenanya mengirimkan tugas ke sana. Tindakan yang dapat dijalankan sebagai target utas dan metode run () void publik wajib diimplementasikan untuk menentukan tugas. Ini akan dijalankan oleh utas di kumpulan utas. Berdasarkan ketersediaan utas di kumpulan, Executor Framework menetapkan pekerjaan (target yang dapat dijalankan) ke utas.Jika semua utas sedang digunakan, tugas harus dihentikan. Setelah utas menyelesaikan satu tugas, utas tersebut kembali ke kumpulan sebagai utas yang tersedia, yang siap menerima tugas di masa mendatang. Callable mirip dengan Runnable dan dapat mengembalikan semua jenis objek saat kita ingin mendapatkan hasil atau status dari tugas.



Kembali Antarmuka yang Dapat Dipanggil

Java Callable mengembalikan java.util.concurrent. Java Future menawarkan metode cancel () untuk menghilangkan tugas Callable terkait. Ini adalah versi metode get () yang kelebihan beban, di mana seseorang dapat menentukan waktu tertentu untuk menunggu hasilnya. Berguna untuk menghindari utas saat ini, yang mungkin diblokir untuk waktu yang lebih lama. Harap diingat bahwa metode get adalah metode sinkron dan hingga callable menyelesaikan tugasnya dan mengembalikan nilai, ia harus menunggu callable.

panjang javascript array

Ada juga metode 'isDone ()' dan 'isCancelled ()' untuk mengambil status saat ini dari tugas Callable terkait. Pertimbangkan contoh di mana jumlah semua angka dari satu sampai 100 perlu ditemukan. Kita dapat mengulang 1 hingga 100 secara berurutan dan akhirnya menambahkannya. Kemungkinan lainnya adalah dengan membagi dan menaklukkan. Dalam metode ini, kita dapat mengelompokkan angka sedemikian rupa sehingga setiap kelompok memiliki tepat dua elemen. Akhirnya, kita dapat menetapkan grup itu ke kumpulan utas. Oleh karena itu, setiap utas mengembalikan jumlah parsial secara paralel dan kemudian mengumpulkan jumlah parsial tersebut dan menambahkannya untuk mendapatkan jumlah keseluruhan.



Fitur Kelas Callable dan Masa Depan

  • Kelas yang dapat dipanggil adalah antarmuka jenis SAM dan karenanya dapat diimplementasikan dalam ekspresi lambda.

  • Kelas yang dapat dipanggil hanya memiliki satu metode 'call ()' yang menampung semua kode yang diperlukan untuk dieksekusi secara asinkron.

  • Dalam lingkungan antarmuka yang dapat dijalankan, tidak ada kemungkinan untuk mengembalikan hasil komputasi atau membuang pengecualian yang dicentang. Sedangkan dengan Callable mengembalikan nilai dan melempar pengecualian yang dicentang tersedia.

  • Metode Get () dari kelas Future dapat digunakan untuk mengambil hasil setelah komputasi selesai. Pengguna juga bisa memeriksa apakah komputasi sudah selesai atau belum dengan menggunakan metode done ().

    algoritma dan struktur data di java
  • Membatalkan komputasi dengan menggunakan metode future.cancel () juga merupakan keuntungan di beberapa aplikasi.

  • Get () disebut panggilan pemblokiran dan terus memblokir hingga komputasi selesai.

Perbandingan Kelas Callable dan Runnable

Callable Dapat dijalankan
Ini adalah bagian dari ' java.util.concurrent ' paket sejak Java 1.5Ini adalah bagian dari paket java.lang sejak Java 1.0
Antarmuka berparameter, seperti CallableAntarmuka non-parameter
Mampu melempar Exception yang dicentangItu tidak bisa melempar pengecualian yang dicentang
Ini berisi satu metode, call (), yang mengembalikan Tipe V, ini sama dengan parameter antarmuka yang ditentukan 'Type'Di sini, ini berisi satu metode, disebut run (), yang mengembalikan void

Di bawah ini adalah contoh sederhana dari kelas callable Java yang diimplementasikan di mana kode mengembalikan nama utas tertentu, yang menjalankan tugas setelah satu detik. Di sini kami menggunakan kerangka ekstraktor untuk menjalankan 100 tugas secara paralel dengan Java Future ke hasil tugas yang dikirimkan. Potongan pertama adalah keluaran dan di bawah ini merupakan kode.

paket com.journaldev.threads import java.util.ArrayList import java.util.Date import java.util.List import java.util.concurrent.Callable import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutorService import java .util.concurrent.Executors import java.util.concurrent.Future public class MyCallable mengimplementasikan Callable {@Override public String call () melempar Exception {Thread.sleep (1000) // kembalikan nama thread yang mengeksekusi tugas callable ini mengembalikan Thread.currentThread () .getName ()} public static void main (String args []) {// Dapatkan ExecutorService dari kelas utilitas Executors, ukuran kumpulan thread adalah 10 ExecutorService executor = Executors.newFixedThreadPool (10) // buat daftar untuk menampung Future objek yang terkait dengan Callable Listlist = ArrayList baru() // Buat instance MyCallable Callable callable = new MyCallable () untuk (int i = 0 i<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

Mematikan Layanan Pelaksana

Aspek krusial dan penting yang terlewatkan oleh banyak pengembang adalah mematikan ExecutorService. ExecutorService sangat penting dan dibuat dengan elemen utas tambahan. Ingatlah bahwa JVM berhenti hanya jika semua utas non-daemon dihentikan. Jadi dengan hanya mematikan layanan pelaksana mencegah JVM berhenti.

Untuk memberi tahu layanan pelaksana bahwa utas tidak perlu dijalankan, kita harus mematikan layanan.

tutorial data besar untuk pemula

Ada tiga cara untuk menjalankan shutdown:

  • void shutdown () - Ini Memulai penghentian secara tertib di mana tugas yang dikirimkan sebelumnya dijalankan, tetapi tidak ada tugas baru yang diterima.
  • Daftar shutdownNow () - Ini mencoba untuk menghentikan semua tugas yang sedang dijalankan secara aktif, menghentikan pemrosesan tugas yang tertunda, dan juga mengembalikan daftar tugas yang sedang menunggu eksekusi.
  • void awaitTermination () - Ini terus memblokir hingga semua tugas selesai dieksekusi setelah permintaan shutdown, atau terjadi batas waktu. Itu juga memblokir ketika utas saat ini terputus. Semua tergantung pada tugas mana yang lebih dulu.

Dengan ini, kita sampai pada bagian akhir artikel Callable Interface di Java. Saya harap Anda mendapatkan pemahaman tentang Future dan Callable Interface di Java.

Lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus pelatihan dan sertifikasi Java J2EE dan SOA Edureka dirancang untuk siswa dan profesional yang ingin menjadi Pengembang Java.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar di blog 'Antarmuka yang Dapat Dipanggil di Java' dan kami akan menghubungi Anda kembali secepatnya.