سؤال

في ال مستندات, ، يتم تعريف FutureWrapper على هذا النحو:

FutureWrapper هو مستقبل بسيط يلف مستقبل الوالدين.

ما هو المستقبل ، لماذا تحتاج إلى لفه ومتى ستستخدمه في محرك التطبيق؟

هل كانت مفيدة؟

المحلول

انها ال java.util.concurrent.Future<V>. Javadoc المرتبط واضح جدا ويحتوي على مثال. بالنسبة للكسول ، إليك نهر copypaste:

أ Future يمثل نتيجة حساب غير متزامن. يتم توفير الأساليب للتحقق مما إذا كان الحساب قد اكتمل ، لانتظار اكتماله ، واسترداد نتيجة الحساب. لا يمكن استرداد النتيجة إلا باستخدام الطريقة getعند الانتهاء من الحساب ، يتم حظره إذا لزم الأمر حتى يصبح جاهزًا. يتم إجراء الإلغاء بواسطة طريقة الإلغاء. يتم توفير طرق إضافية لتحديد ما إذا كانت المهمة مكتملة بشكل طبيعي أو تم إلغاؤها. بمجرد الانتهاء من الحساب ، لا يمكن إلغاء الحساب. إذا كنت ترغب في استخدام أ Future من أجل الإلغاء ولكن لا توفر نتيجة قابلة للاستخدام ، يمكنك إعلان أنواع النموذج Future<?> والعودة nullنتيجة للمهمة الأساسية.

استخدام العينة (لاحظ أن الفئات التالية مكياج.)

 interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target)
       throws InterruptedException {
     Future<String> future
       = executor.submit(new Callable<String>() {
         public String call() {
             return searcher.search(target);
         }});
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
 }

ال FutureTask الفصل هو تطبيق Future هذا ينفذ Runnable, ، وهكذا قد يتم تنفيذها بواسطة Executor. على سبيل المثال ، يمكن استبدال البناء أعلاه مع إرسال:

 FutureTask<String> future =
   new FutureTask<String>(new Callable<String>() {
     public String call() {
       return searcher.search(target);
   }});
 executor.execute(future);  

تأثيرات تناسق الذاكرة: الإجراءات التي اتخذتها الحساب غير المتزامن يحدث قبل الإجراءات التي تلي المقابلة Future.get() في موضوع آخر.

ال FutureWrapper هو مجرد ديكور لأي والد Future.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top