1. Jelaskan dan narasi
Saat pemrograman di bawah multithreading. Anda dapat menemukan suatu kebutuhan, yaitu, ketika utas saya membuka ujung, saya ingin mendapatkan data yang dikembalikan di setiap utas pada saat yang sama dan kemudian melakukan pemrosesan terpadu. Di bawah persyaratan ini, kombinasi masa depan dan dapat dipanggil sangat digunakan.
Beberapa orang juga mungkin mengatakan bahwa saya dapat menggunakan sinkronisasi untuk menyelesaikan persyaratan ini, tetapi memang mungkin dalam kasus biasa. Tetapi dalam kasus khusus, itu tidak akan berhasil:
Bayangkan bahwa Anda telah mengaktifkan beberapa utas untuk secara sinkron menghitung beberapa data, tetapi semua orang tahu bahwa utas akan bersaing untuk mendapatkan sumber daya, yaitu. Saat Anda mengaktifkan beberapa utas untuk menyinkronkan perhitungan data. Faktanya, urutan perhitungan antara utas tidak bisa nol, tentu saja, bukan tidak mungkin untuk menghadapinya kecuali Anda tidak membuat kesalahan besar. Dalam kasus seperti itu. Kombinasi masa depan dan dapat dipanggil adalah pilihan terbaik.
2. Contoh sampel
Contoh -contoh dari kedua kategori ini sebenarnya sangat mudah, terutama tergantung pada apakah Anda dapat menemukan penggunaannya dalam penggunaan aktual. Pada kode:
tes paket; impor java.util.concurrent.callable; impor java.util.concurrent.executionException; impor java.util.concurrent.executorservice; impor java.util.concurrent.executors; import java.util.concurrent.future; Kelas Publik FeatureCallableTest {Private Static ExecutorService Service = Executors.newfixedThreadPool (100); jumlah int statis pribadi = 1; public static void main (String [] args) melempar InterruptedException, ExecutionException {int sum = 0; untuk (int i = 0; i <100; i ++) {Future <Integer> Future = service.submit (baru Callable <Integer> () {@Override Public Integer call () melempar Exception {System.out.println (thread.currentThread (). GetName ()); return ++ count; int f = found.get (); jumlah += f; System.out.println ("Masa Depan adalah" + F); } System.out.println ("Sum is" + sum); service.shutdownnow (); }}