Untuk meningkatkan stabilitas kinerja volume konkurensi besar dalam proyek, kumpulan utas sering digunakan untuk melakukan operasi asinkron multi-thread. Ada dua jenis multi-threading. Salah satunya adalah mengimplementasikan antarmuka runnable, yang tidak memiliki nilai pengembalian, dan yang lainnya adalah mengimplementasikan antarmuka yang dapat dipanggil, yang memiliki nilai pengembalian.
Ketika salah satu utas diatur, itu tidak boleh secara teoritis mempengaruhi hasil eksekusi utas lain, tetapi masalah yang muncul dalam proyek menunjukkan bahwa satu utas diblokir dan antarmuka yang dikembalikan oleh utas lainnya kosong. Sebenarnya, ini adalah pertanyaan yang sangat sederhana, tetapi karena saya menemuinya untuk pertama kalinya, saya masih memikirkannya untuk sementara waktu. Ini sangat sederhana, itu karena garis pemblokiran
Prosesnya tidak dirilis, dan setelah jumlah konkurensi besar, jumlah kumpulan utas akan penuh, sehingga utas lain dalam keadaan menunggu.
Terlampir adalah kode debugging yang saya tulis sendiri. Ketika saya tidak bisa memikirkan masalah, saya mensimulasikannya dan mungkin masalahnya akan keluar.
impor java.util.concurrent.callable; impor java.util.concurrent.executionException; impor java.util.concurrent.executorservice; impor java.util.concurrent.executors; impor java.util.konkurrent.future; future; java.util.concurrent.timeOutException; kelas publik Futuretest {public static void main (string [] args) melempar interruptedException, executionException, timeoutexception {final executorservice exec = executors.newfixedthreadpool (1); Callable <String> call = new Callable <string> () {public String call () melempar InterruptedException {// Mulailah mengeksekusi Operasi Operasi yang memakan waktu.sleep (1000 * 2); kembalikan "1 eksekusi utas selesai."; }}; Callable <String> call2 = new Callable <string> () {public String call () melempar Exception {// Mulai mengeksekusi operasi yang memakan waktu // thread.sleep (1000 * 5); return "2 eksekusi utas selesai."; }}; Callable <String> call3 = new Callable <string> () {public String call () melempar Exception {// Mulai mengeksekusi operasi yang memakan waktu // thread.sleep (1000 * 5); return "3 Eksekusi utas selesai."; }}; Future <string> Future = exec.submit (call); Future <string> Future3 = exec.submit (call3); Masa depan <string> future2 = exec.submit (call2); String obj = ""; String obj2 = ""; String obj3 = ""; coba {obj = future.get (500, timeunit.milliseconds); // Atur batas waktu pemrosesan tugas ke} // 1 tangkap kedua (pengecualian e) {System.out.println ("Processing Timeout ...."); e.printstacktrace (); } coba {obj3 = future3.get (3000, timeunit.milliseconds); // Atur batas waktu pemrosesan tugas ke} // 1 tangkap kedua (pengecualian e) {System.out.println ("Pemrosesan batas waktu ......"); e.printstacktrace (); } coba {obj2 = future2.get (3000, timeunit.milliseconds);} catch (exception e) {System.out.println ("Processing Timeout ...."); e.printstacktrace (); } System.out.println ("3 Tugas Pengembalian Berhasil:" + Obj3); System.out.println ("2 Tugas Pengembalian Berhasil:" + Obj2); System.out.println ("1 Tugas Pengembalian Berhasil:" + Obj); exec.shutdown (); }}Di atas adalah diskusi singkat tentang pengecualian layanan yang disebabkan oleh batas waktu multi-threading asinkron di Java. Saya harap semua orang akan mendukung wulin.com lebih banyak ~