2016-08-03 8 views
17

मैंने कड़ी मेहनत की लेकिन मुझे कोई लेख या ब्लॉग नहीं मिला जो स्पष्ट रूप से "सुनने योग्य भविष्य" और "completablefuture" की तुलना करता है, और इसका एक अच्छा विश्लेषण प्रदान करता है। तो अगर कोई मुझे ऐसे ब्लॉग या आलेख में समझा सकता है या इंगित कर सकता है, तो यह मेरे लिए वास्तव में अच्छा होगा। धन्यवादसुनोटेबलफ्यूचर बनाम Completablefuture

उत्तर

17

दोनों सुनोएबलफ्यूचर और कॉम्प्लेटेबल फ्यूचर को अपने माता-पिता वर्ग भविष्य पर लाभ होता है ताकि कॉलर को एक तरफ "पंजीकरण" करने की इजाजत मिलती है या किसी अन्य कॉलबैक को कॉल किया जा सकता है जब एसिंक कार्रवाई पूरी हो जाती है।

भविष्य के साथ

आप यह कर सकते हैं:

ExecutorService executor = ...; 
Future f = executor.submit(...); 
f.get(); 

f.get() ब्लॉक async कार्रवाई पूर्ण होने तक;

ListenableFuture साथ

आप इस तरह एक कॉलबैक रजिस्टर कर सकते हैं:

ListenableFuture listenable = service.submit(...); 
    Futures.addCallback(listenable, new FutureCallback<Object>() { 
       @Override 
       public void onSuccess(Object o) { 
        //handle on success 
       } 

       @Override 
       public void onFailure(Throwable throwable) { 
        //handle on failure 
       } 
      }) 

साथ CompletableFuture आप भी जब कार्य पूरा हो गया है के लिए एक कॉलबैक रजिस्टर कर सकते हैं, लेकिन यह है कि यह में ListenableFuture से अलग है किसी भी धागे से पूरा किया जा सकता है जो इसे पूरा करना चाहता है।

CompletableFuture completableFuture = new CompletableFuture(); 
    completableFuture.whenComplete(new BiConsumer() { 
     @Override 
     public void accept(Object o, Object o2) { 
      //handle complete 
     } 
    }); // complete the task 
    completableFuture.complete(new Object()) 

एक धागा काम पर पूरा होने पर, मूल्य एक फोन से प्राप्त प्राप्त करने के लिए() करता है, तो काम पहले ही पूरा नहीं है पैरामीटर मान के साथ स्थापित किया जाएगा।

Read about CompletableFuture

+1

दूसरे शब्दों में ... ListenableFuture, एक सुविचारित स्वच्छ इंटरफ़ेस है, जबकि CompletableFuture (और CompletionStage इंटरफेस के बाद से यह उजागर करता है 'toCompletableFuture') खतरनाक है क्योंकि यह' को उजागर करता है complete' तरीकों। फिर भी ओरेकल से अपेक्षा की जाने वाली अच्छी तरह से विचार-विमर्श कचरा का एक और उदाहरण। –

+0

'CompletionStage' अच्छा होगा अगर उसने' भविष्य 'बढ़ाया और 'tocompletableFuture' का खुलासा नहीं किया। और फिर वे इसे "चेनटेबल फ्यूचर" जैसे कुछ सार्थक नाम दे सकते थे। –

+2

'भविष्य' और 'सुनोटेबल फ्यूचर' इंटरफेस हैं जबकि 'CompletableFuture' एक वर्ग है जो' भविष्य ' – cozyconemotel

संबंधित मुद्दे