سؤال

انا استخدم ScheduleDexecutorService, وبعد أن أسميها اغلق الطريقة ، لا يمكنني جدولة تشغيله. الدعوة scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS) بعد shutdown() رمي java.util.concurrent.rejectedExecutionException. هل هناك طريقة أخرى لتشغيل مهمة جديدة بعد shutdown() يسمى ScheduleDexecutorService?

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

المحلول

يمكنك إعادة استخدام المجدول ، ولكن يجب ألا تغلقه. بدلاً من ذلك ، قم بإلغاء موضوع التشغيل الذي يمكنك الحصول عليه عند استدعاء طريقة ScheduleAtFixedRate. السابق:

//get reference to the future
Future<?> future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//cancel instead of shutdown
future.cancel(true);
//schedule again (reuse)
future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//shutdown when you don't need to reuse the service anymore
service.shutdown()

نصائح أخرى

جافادوك shutdown() قل:

Initiates an orderly shutdown in which previously submitted tasks are executed,
but no new tasks will be accepted.

لذلك ، لا يمكنك الاتصال shutdow() ثم جدولة مهام جديدة.

لا يمكنك جعل المنفذ الخاص بك يقبل مهام جديدة بعد إغلاقها. السؤال الأكثر صلة هو لماذا تحتاج إلى إغلاقه في المقام الأول؟ يجب إعادة استخدام المنفذين الذين تنشئهم عبر عمر التطبيق أو النظام الفرعي.

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