Runable, Callable, Future, Futuretask, ExecutorService, Excetor, Excutors, dan ThreadPoolExcetor di Java merangkum kata kunci ini dan penggunaannya.
Pertama mengklasifikasikannya:
Dapat dijalankan, dapat dipanggil
Masa depan, futuretask
ExecutorService, Excetor, Excutors, ThreadPoolExcetor
1. Tentang dapat dijalankan dan dipanggil
Pertama -tama, ada tiga cara untuk membuat utas di Java:
Keuntungan dan Kerugian dari Tiga Implementasi:
Karena warisan utas, kelas lain tidak dapat diwarisi, dan utas saat ini ini dapat diperoleh.
Implementasikan antarmuka yang dapat dijalankan, tidak ada nilai pengembalian, dapatkan utas saat ini. CurrentThread ()
Laksanakan antarmuka yang dapat dipanggil, Anda bisa mendapatkan nilai pengembalian melalui future.get () dan dapatkan utas saat ini.currentThread ()
Warisan utas, dua langkah:
kelas DemothRead memperluas utas {@Override public void run () {super.run (); // Lakukan operasi yang memakan waktu ...}} demothread t = new demothread (); t.start ();Untuk mengimplementasikan Runable, umumnya digunakan sebagai berikut:
utas baru (runnable baru () {@Override public void run () {// Do Something}}). start ();Untuk kesederhanaan.
Sangat merepotkan untuk mendapatkan hasil eksekusi utas dalam dua metode di atas dan tidak dapat diperoleh secara langsung. JDK1.5 Menambahkan metode Callable, Callable's Call () untuk mengembalikan nilai dan melempar pengecualian. Callable dapat mengembalikan objek di masa depan yang dimuat dengan hasil perhitungan.
Kode sumber yang dapat dipanggil:
Antarmuka publik Callable <V> {V call () melempar pengecualian;}Penggunaan dasar yang dapat dipanggil:
Futuretask <Integer> futuretask = futureTask baru <integer> (new Callable <Integer> () {@Override Public Integer call () melempar pengecualian {// lakukan sesuatu return null;}}); thread thread = new thread (futureTask); thread.start (); integer hasil = futuretask = futuretask (futuretask); thread.start (); integer hasil = futuretask.Menjalankan tugas yang dapat dipanggil bisa mendapatkan objek di masa depan dan mendapatkan nilai pengembalian yang dieksekusi oleh utas melalui metode GET () di masa depan. Lalu masa depan,
Apa perbedaan antara Futuretask dan bagaimana menggunakannya?
-> NEXT ()
2. Tentang Masa Depan dan Futuretask
Untuk mendapatkan hasil eksekusi utas, Futuretask Future diperkenalkan. Jadi apa hubungan mereka dan bagaimana menggunakannya?
Kelas masa depan terletak di bawah paket java.util.concurrent, yang merupakan antarmuka:
antarmuka publik masa depan <v> {boolean cancel (boolean mayintruppifrunning); boolean iscancelled (); Boolean Isdone (); V get () melempar interruptedException, ExecutionException; V dapatkan (waktu lama, unit timeUnit) melempar interruptedException, ExecutionException, timeoutexception;}Masa depan mendefinisikan 5 metode:
1) BOOLEAN CHOT (BOOLEAN MayInterruptunning): Berusaha membatalkan eksekusi tugas ini. Upaya ini akan gagal jika tugas telah selesai, atau telah dibatalkan, atau tidak dapat dibatalkan karena alasan lain. Ketika Batal () dipanggil, jika panggilan berhasil dan tugas belum dimulai, tugas tidak akan pernah berjalan. Jika tugas telah dimulai, parameter mayintruptunning menentukan apakah utas yang mengeksekusi tugas harus terganggu dengan cara yang berupaya menghentikan tugas. Setelah metode ini kembali, panggilan selanjutnya ke isDone () akan selalu mengembalikan true. Jika metode ini mengembalikan true, panggilan selanjutnya ke isCancelled () akan selalu mengembalikan true.
2) boolean iscancelled (): Kembalikan true jika tugas dibatalkan sebelum selesai secara normal.
3) Boolean Isdone (): Kembalikan true jika tugas telah selesai. Ini dapat dilakukan karena penghentian normal, pengecualian atau pembatalan, dalam semua kasus ini, metode ini akan mengembalikan true.
4) v get () melempar interruptedException, ExecutionException: jika perlu, tunggu perhitungan selesai dan kemudian dapatkan hasilnya.
5) V dapatkan (waktu lama, unit timeUnit) melempar interruptedException, ExecutionException, timeoutException: jika perlu, tunggu paling banyak setelah waktu tertentu untuk membuat perhitungan selesai, dan dapatkan hasilnya (jika hasilnya tersedia).
Secara umum, masa depan menyediakan tiga fungsi:
Tentukan apakah tugas selesai;
Kemampuan untuk mengganggu tugas;
Dapat memperoleh hasil eksekusi tugas.
Poin -Poin Kunci:
RunnableFuture mewarisi antarmuka runnable dan antarmuka di masa depan, sementara Futuretask mengimplementasikan antarmuka RunnableFuture.
Implementasi Futuretask:
Public Class Futuretask <V> mengimplementasikan RunnableFuture <V>
Implementasi Antarmuka RunnableFuture:
Antarmuka Publik RunnableFuture <V> Memperpanjang Runnable, Future <V> {void run ();}Futuretask adalah kelas implementasi unik dari antarmuka masa depan.
Selain membungkus futuretask dengan utas, ada cara lain untuk menggunakannya:
ExecutorService Executor = Executors.NewCachedThreadPool (); Futuretask <Integer> futuretask = futuretask baru <Integer> (new Callable <Integer> () {@Override public integer call () lempar Exception {// lakukan sesuatu return null;}}}; Execoror (); Kerangka kerja pelaksana digunakan di sini.
-> next ();
3. Tentang ExecutorService, Excetor, Excutors, ThreadPoolExcetor
Kerangka kerja pelaksana diperkenalkan di Java 5. Kerangka kerja pelaksana adalah kerangka kerja yang mengeksekusi tugas asinkron berdasarkan serangkaian panggilan kebijakan, penjadwalan, pelaksanaan dan pengendalian.
Sebelum berbicara tentang kerangka kerja pelaksana, kita perlu memperkenalkan konsep baru - ThreadPoolExecutor:
Public ThreadPoolExecutor (intcorepoolsize, int maximumpoolsize, stepalivetime panjang, unit timeunit, blockingqueue <Runnable> workqueue, threadfactory threadfactory, rejectExecutionHandler Handler)
ThreadPoolExecutor adalah implementasi yang mendasari kelas pelaksana.
Dalam dokumentasi bantuan JDK, ada bagian:
"Sangat disarankan agar pemrogram menggunakan metode pelaksana pabrik yang lebih nyaman.
Jadi apa itu ExecutorService, Excetor, dan Excutors?
Excetor adalah antarmuka inti di level abstrak:
Eksekutor Antarmuka Publik {void execute (runnable command);}Antarmuka ExecutorService memperluas antarmuka eksekutor dan menyediakan metode seperti mengembalikan objek di masa depan, mengakhiri, menutup kumpulan utas, dll.
antarmuka publik ExecutorService memperluas eksekutor {void shutdown (); <T> Masa Depan <T> Kirim (tugas yang dapat dipanggil <T>); <T> Masa Depan <T> Kirim (Tugas Runnable, T Hasil); <T> DAFTAR <Future <t>> Invokeall (Collection <? Extends Callable <T>> Tugas, waktu lama, unit TimeUnit) melempar InterruptedException;}Executors adalah kelas alat yang mirip dengan koleksi. Memberikan metode pabrik untuk membuat berbagai jenis kumpulan benang, seperti FixedThreadPool atau CachedThreadPool.
Eksekutor kelas publik {Public ExecutorService newfixedThreadPool (int nthreads) {return new ThreadPoolExecutor (nthreads, nthreads, 0L, timeunit.milliseconds, LinkedBlockequeue baru <Runnable> ()); } public static executorService newCachedThreadPool () {return new ThreadPoolExecutor (0, integer.max_value, 60l, timeunit.seconds, sinkron baru <Runnable> ()); }}Di atas adalah kompilasi kata kunci java multi-threaded, jadi itu tidak akan berantakan.
Di atas adalah implementasi penyortiran kata kunci multi-threaded di Java yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!