1. وصف وسرد
عند البرمجة تحت multithreading. قد تواجه حاجة ، أي عندما تفتح مؤشرات الترابط التي أفتحها ، أريد الحصول على البيانات التي يتم إرجاعها في كل مؤشر ترابط في نفس الوقت ثم إجراء معالجة موحدة. بموجب هذا المطلب ، يأتي الجمع بين المستقبل والقابل للاستخدام.
قد يقول بعض الأشخاص أيضًا أنه يمكنني استخدام المزامنة لإكمال هذا المطلب ، ولكن هذا ممكن بالفعل في الحالات العادية. لكن في حالة خاصة ، لن ينجح:
تخيل أنك قمت بتمكين عدة مؤشرات ترابط لحساب بعض البيانات بشكل متزامن ، لكن الجميع يعلم أن مؤشرات الترابط سوف تتنافس على الموارد ، أي. عند تمكين مؤشرات ترابط متعددة لمزامنة حساب البيانات. في الواقع ، لا يمكن أن يكون ترتيب الحساب بين المواضيع فارغًا ، بالطبع ، ليس من المستحيل التعامل معه إلا إذا لم ترتكب خطأً كبيراً. في مثل هذه الحالة. مزيج من المستقبل وقابل للاستدعاء هو الخيار الأفضل.
2. عينة أمثلة
أمثلة هاتين الفئتين سهلة للغاية في الواقع ، اعتمادًا على ما إذا كان يمكنك العثور على استخدامها في الاستخدام الفعلي. على الرمز:
اختبار الحزمة استيراد java.util.concurrent.callable ؛ import java.util.concurrent.executionException ؛ import java.util.concurrent.executorservice ؛ import java.util.concurrent.executors ؛ import java.util.concurrent.future ؛ الفئة العامة fupereCallableTest {private static eventorservice service = Executors.NewFixedThreadPool (100) ؛ العدد الثابت الخاص الثابت = 1 ؛ رميات الفراغ الثابتة العامة (سلسلة [] args) interruptedException ، ExecutionException {int sum = 0 ؛ لـ (int i = 0 ؛ i <100 ؛ i ++) {future <integer> future = service.submit (new callable <integer> () {Override public integer call () rems {system.out.println (thread.currentThread (). getName ()) ؛ return ++ count ؛}}) ؛ int f = future.get () ؛ SUM += F ؛ System.out.println ("المستقبل هو" + f) ؛ } system.out.println ("sum is" + sum) ؛ service.shutdownNow () ؛ }}