Paket Java.util.concurrent menyediakan kelas tentang operasi multi-threaded. Yang umum digunakan adalah ExecutorService dan kelas implementasinya (seperti ThreadPoolExecutor, dll.), Pelaksana, pelaksana, masa depan, dapat dipanggil, dll.
1. Antarmuka ExecutorService (diwarisi dari Executor): menyediakan beberapa metode operasi multi-threaded asinkron, seperti execute (), submit (), shutdown (), shutdownnow (), dll.
2. Antarmuka Eksekutor: Jalankan tugas yang dikirimkan (utas), dengan hanya satu metode yang dieksekusi (runnable a)
2. Kelas Eksekutor: Menyediakan beberapa metode pabrik dan beberapa metode publik untuk mengoperasikan subclass dan threadFactory, dll., Seperti newxxx (), xxxthreadfactory (), dll.
3. Futrue Interface: mewakili hasil eksekusi utas, menyediakan metode untuk mendapatkan hasil eksekusi utas dan membatalkan utas, seperti get (), cancle (), dll.
4. Antarmuka yang dapat dipanggil: Nilai utas dengan pengembalian disediakan oleh JDK1.5 untuk menjalankan antarmuka baru
Membuat catatan sederhana tentang pemahaman ExecutorService dan Masa Depan
Kode:
kelas publik utama {private static int count = 0; public static void main (string [] args) {list <tough> resultList = new LinkedList <> (); /*** Executors.NewCachedThreadPool () Buat kumpulan cache utas. Jika utas tidak digunakan pada tahun 60 -an, utas akan dihentikan dan dihapus dari Cache Pool* Executors. ExecutorService ExecutorService = Executors.NewCachedThreadPool (); untuk (int i = 0; i <10; i ++) {Future Future = ExecutorService.submit (baru Callable <String> () {@Override Public String call () {coba {System.out.println (thread.currentThread (). GetName ()); thread.outleep (5000);} catch (). Main.count; resultlist.add (masa depan); } ExecutorService.shutdown (); untuk (Future Future: HasilList) {try {System.out.println (future.get () + ".. adalah over ..."); } catch (InterruptedException e) {E.PrintStackTrace (); } catch (executionException e) {e.printstacktrace (); }} System.out.println ("Ujung utas utama ..."); }}Keluaran:
pool-1-thread-1pool-1-thread-2pool-1-thread-3pool-1-thread-4pool-1-thread-5pool-1-thread-6pool-1-thread-7pool-1-thread-8pool-1-thread-9pool-1-thread-10pool-1-thread-1..start Main count:...0pool-1-thread-2..start Main count:...0pool-1-thread-3..start Hitungan utama: ... 1pool-1-thread-2..d Hitungan utama: ... 1pool-1-thread-1..d Hitungan utama: ... 1pool-1-thread-3..d Hitungan utama: ... 1pool-1-thread-2 .. Hitung utama: ... 1pool-1-thread-1..end Count Main: ... 1pool-1-thread-3 .. end-end count: ... 2pool-1- end-1--thread-1 ... Pool-thread-1-thread-3..D Hitung Utama: 2pool-1-1 over...pool-1-thread-4..start Main count:...2pool-1-thread-3..is over...pool-1-thread-4..end Main count:...3pool-1-thread-4..is over...pool-1-thread-5..start Main count:...3pool-1-thread-5..end Main count:...4pool-1-thread-5..is over...pool-1-thread-6..start Main Hitungan: ... 4pool-1-thread-6..d Hitungan utama: ... 4pool-1-thread-6..d Hitungan utama: ... 4pool-1-thread-6..d Hitungan utama: ... 4pool-1-thread-6 .. Hitungan utama: ... 4pool-1-thread-6..d Count: ... 5pool-6-thread-thread-thread-6..m over-1-thread-6..d Count: 5pool-1-thread-thread-thread-6 overs over-1-thread-6..d-6 .. Hitungan: ... 6pool-1-thread-7..Dara ... pool-1-thread-8..Menghadiri Hitungan Utama: ... 6pool-1-thread-8..d Hitungan utama: ... 7pool-1-thread-8..adalah ... pool-1-thread-9 .. Hitungan utama: ... 7pool-1-thread-9 .. Hitungan utama: ... 8pool-1-thread-thread-9pool-9 Hitungan: ... 7pool-1-thread-9..d Hitungan utama: ... 8pool-1-thread-9..adalah lebih dari ... pool-1-thread-10..sTart Hitungan utama: ... 8pool-1-thread-9..adalah lebih dari ... Pool-1-thread-10..Tembar Hitungan Utama: ... 8pool-1-thread-10..d Hitungan UT: ... 9pool-10
Konsol mencetak hasil output di atas setelah menunggu selama 5 detik. Alasannya adalah ketika semua utas dimulai, itu adalah operasi bersamaan dan akan menunggu selama 5 detik. Jadi secara keseluruhan, tampaknya hanya menunggu selama 5 detik. Ini adalah operasi bersamaan.
Meringkaskan:
1. Perbedaan antara metode Execute () dan metode submit () yang disediakan oleh ExecutorService:
A. Metode Execute () hanya menerima contoh tipe runnable, sehingga tidak bisa mendapatkan nilai pengembalian, juga tidak dapat secara dinamis mendapatkan situasi eksekusi utas.
B. Metode submit () menerima contoh yang dapat dijalankan dan dapat dipanggil dan akan mengembalikan instance di masa depan. Metode get () dari instance di masa depan dapat memperoleh nilai pengembalian eksekusi utas dan melempar pengecualian eksekusi utas. Jadi jika Anda ingin mendapatkan hasilnya dikembalikan berdasarkan eksekusi utas dan dapat menangani kemungkinan pengecualian selama eksekusi utas, atau jika Anda ingin membatalkan eksekusi utas di tengah, Anda dapat menggunakan metode pengiriman ()
2. Melalui output, Anda dapat melihat bahwa metode utama (utas utama) berakhir setelah semua utas telah menyelesaikan eksekusi. Alasannya:
A. Dapatkan contoh masa depan melalui metode submit (), dan dapatkan hasil pengembalian utas melalui metode get () dari instance di masa depan. Metode get () dari instance masa depan akan menunggu utas dieksekusi sebelum kembali, sehingga metode utama akan menunggu semua utas anak berakhir sebelum berakhir
B. Jika loop untuk yang ditandai dengan merah di atas dilepas, metode utama (utas utama) akan berakhir lebih awal tanpa menunggu semua utas anak berakhir
Mengisi kembali:
1. Ketika beberapa utas dieksekusi secara bersamaan, jika pengecualian terjadi di salah satu utas dan tidak diproses, utas akan secara otomatis menghentikan eksekusi, tetapi utas lainnya masih akan dieksekusi secara normal. Inilah sebabnya mengapa Tomcat dapat terus memberikan layanan ketika pengecualian terjadi dalam permintaan Tomcat.
2. Tomcat menyediakan kolam benang dan kolam tunggu. Setiap permintaan akan memulai kembali utas baru untuk memproses permintaan. Jika utas di kolam utas digunakan, itu akan dimasukkan ke dalam kolam tunggu dan menunggu. Ketika utas dilepaskan kembali ke kumpulan utas, utas akan ditugaskan untuk memproses permintaan di kumpulan menunggu.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.