تستكشف هذه المقالة بشكل أساسي استخدام Java Conversion Programming قابل للاتصال والمستقبل ، وتشارك رموز المثال ذات الصلة ، والتفاصيل هي كما يلي.
نعلم جميعًا أن هناك طريقتان لتنفيذ الخيوط المتعددة. أحدهما هو ترجيح الخيط والآخر هو تنفيذ Runnable. ومع ذلك ، فإن كل من هذين الطريقتين لهما عيب ، ولا يمكن الحصول على نتيجة الإرجاع بعد اكتمال المهمة. للحصول على نتيجة الإرجاع ، عليك استخدام قابلة للاستدعاء. يمكن أن يكون للمهمة القابلة للاتصال قيمة إرجاع ، لكنها لا يمكن الحصول على قيمة الإرجاع مباشرة من المهمة القابلة للاتصال ؛ إذا كنت ترغب في الحصول على قيمة الإرجاع للمهمة القابلة للاستدعاء ، فأنت بحاجة إلى استخدام المستقبل. لذلك عادة ما تستخدم المهام القابلة للاستدعاء والوضع المستقبلي مجتمعة.
تخيل سيناريو: تحتاج إلى واجهة قائمة بعد. بالإضافة إلى إرجاع قائمة المنشورات ، تحتاج أيضًا إلى إرجاع قائمة أماكن مثل كل منشور. بالنسبة لحسابات 10 منشورات على الصفحة ، تتطلب هذه الواجهة الوصول إلى قاعدة البيانات 21 مرة. بمجرد الوصول إلى قاعدة البيانات على أساس 100 مللي ثانية ، 21 مرة ، والوقت التراكمي هو 2.1s. ربما يكون وقت الاستجابة هذا غير مرض. ما يجب القيام به؟ التحول غير المتزامن للواجهات.
بعد اكتشاف قائمة المنشورات ، تكرارها عبر قائمة النشر ، وابدأ 10 مؤشرات ترابط في الحلقة ، وحصل بشكل متزامن على قائمة ما شابه لكل منشور ، وفي نفس الوقت ، يتم إعداد 10 مؤشرات ترابط للحصول على قائمة التعليقات لكل منشور. بعد هذا التحول ، يتم تقصير وقت الاستجابة للواجهة إلى 200 مللي ثانية. في هذا الوقت ، نحتاج إلى استخدام Callabel مع المستقبل لتحقيق ذلك.
القائمة الخاصة <Stresponse> CreatePoStResponselist (الصفحة <PosterSponse> الصفحة ، السلسلة النهائية userId) {if (page.getCount () == 0 || page == null || page.getList () == null) {return null ؛ } // احصل على قائمة post list <SteSponse> circleresponselist = page.getList () ؛ حجم int = circleresponselist.size () ؛ eventorservice commentPool = Executors.NewFixedThreadPool (size) ؛ ExecutorService SupportPool = Executors.NewFixedThreadPool (Size) ؛ جرب {List <Sest> commentFutureList = new ArrayList <utepative> (size) ؛ if (circleresponselist! = null && circleresponselist.size ()> 0) {for (posterSponse posterSponse: circleresponselist) {Final String CircleId = postresponse.getId () ؛ السلسلة النهائية postUserId = posterSponse.getuserId () ؛ // تحقق من قائمة التعليقات القابلة للاتصال <list <circlereviews >> callableComment = new callable <list <circlereviews >> () {Override Public List <circlereviews> call () rems stispion {return circlereviewsbiz.getPostComments (CircleId) ؛ }} ؛ المستقبل f = commentPool.submit (callableComment) ؛ CommentFutureList.add (F) ؛ // تحقق من القائمة المتوسطة القابلة للاتصال <list <Circlezan>> callablesupport = new callable <list <Circlezan>> () {Override Public List <Circlezan> call () rems {return circlezanbiz.findlist (circleId) ؛ }} ؛ Support FutureFuture = supportPool.Submit (CallableSupport) ؛ CommentFutureList.add (SupportFuture) ؛ }} // الحصول على نتائج التنفيذ لجميع المهام المتزامنة int i = 0 ؛ POSTRESPONT TEMP = NULL ؛ لـ (Future F: CommentFutureList) {temp = circleresponselist.get (i) ؛ Temp.SetCommentList ((قائمة <CirclereViews>) f.get () ؛ temp.SetSupportList ((قائمة <Circlezan>) f.get () ؛ circleresponselist.set (i ، temp) ؛ i ++ ؛}}} catch (استثناء e) {E.PrintStackTrace () ؛ SupportPool.shutdown () ؛لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول مدونة مثال التطبيق من Java متزامنة البرمجة القابلة للاتصال والمستقبل. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!