1. المفهوم
يمثل المستقبل نتيجة مهمة غير متزامنة ربما لم تكتمل. يمكن إضافة رد الاتصال إلى هذه النتيجة لتنفيذ العمليات المقابلة بعد نجاح تنفيذ المهمة أو فشله.
2. الواجهة المستقبلية
تحدد الواجهة المستقبلية خمس طرق رئيسية للواجهة. يرث RunnableFuture وScheduleFuture هذه الواجهة، ويرث CompleteFuture وForkJoinTask هذه الواجهة.
3. أمثلة
اختبار الحزمة؛ import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; الطبقة العامة CallableFutureTest { public static void main(String[] args) { وقت البدء الطويل = System.currentTimeMillis(); Callable<Integer> countCallable = new Callable<Integer>() { @تجاوز استدعاء عدد صحيح عام () يطرح استثناء { // TODO طريقة تم إنشاؤها تلقائيًا stub Thread.sleep(2000); // تستغرق وقت المحاكاة int result = 1+2; نتيجة الإرجاع؛ } }; FutureTask<Integer> CalculateFutureTask = new FutureTask<>(calculateCallable); Thread t1 = new Thread(calculateFutureTask); t1.start(); // انضم الآن إلى Thread لتشغيل خدمة تستغرق وقتًا طويلاً وتحاكي المكالمات عن بعد وتعتمد على نتائج الحساب الخاصة بها (مثل حاسبة الشبكة) يحاول { // محاكاة المهام التي تستغرق وقتًا طويلاً، يقوم الخيط الرئيسي بعمله الخاص، مما يعكس مزايا الخيوط المتعددة Thread.sleep(3000); كثافة العمليات = 3+5; نتيجة عدد صحيح = CalculateFutureTask.get(); System.out.println("result = "+(a+result));// محاكاة نتيجة تشغيل الخيط الرئيسي بالاعتماد على الخيط الفرعي long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } قبض على (InterruptedException | ExecutionException e) { // TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا printStackTrace(); } } }
كما ترى مما سبق، فإن الوقت المستغرق أعلاه هو حوالي 3 ثوانٍ، وهو في الواقع الوقت الذي يقضيه الخيط الرئيسي في النوم (3000). قد يكون الوقت الذي قد نحتاجه 5 ثوانٍ (الخيط الفرعي 2 ثانية + الخيط الرئيسي 3 ثوانٍ).
ما ورد أعلاه هو كيفية حصول Future على نتائج سلاسل المحادثات في Java. يمكن القول أن Future أكثر مرونة في معالجة سلاسل الرسائل. الآلية تقريبًا هي أنه عند تشغيل مؤشر ترابط واحد، يتم تشغيل مؤشر ترابط آخر في نفس الوقت. إذا كنت مهتمًا، يمكنك معرفة المزيد بعد انتهاء الدرس.