توقيت Java - وظائف تسمى عدم إكمالها!
-
19-09-2019 - |
سؤال
لذلك لدي TimerTask task
استدعاء وظيفة onTimerComplete()
في لها run()
onTimerComplete()
يبدو شيئا مثل هذا:
private void onTimerComplete(){
myFunc1();
myFunc2();
}
أقوم بإجراء Timer t
وأنا جدولة TimerTask
مع t.schedule(task, 2000);
المشكلة هي، عندما يكون الموقت مستيقظا والمهمة تعمل onTimerComplete()
ولكن هذه الوظيفة لا تنتهي. إنه يركض myFunc1()
ولكن لا تنهي أبدا ولا يدعو myFunc2()
ومع ذلك، إذا اتصلت onTimerComplete()
مباشرة، كل شيء يعمل.
ما هي الصفقة هنا؟
المحلول
إذا myFunc1()
يبدأ، ولكن لا تنتهي أبدا، فمن المرجح أن تكون المشكلة في هذه الوظيفة.
يجب أن تكون على دراية بأن هذه الوظيفة سيتم استدعاؤها في مؤشر ترابط منفصل. هناك احتمال وجود نوع من التفاعل غير المرغوب فيه بين مؤشر ترابطين. فيالوصف هنا.)
إذا myFunc1()
يستخدم بعض المتغيرات المستخدمة أيضا في الأنشطة المتزامنة الأخرى، قد تحتاج إلى مزامنة أجزاء من التعليمات البرمجية الخاصة بك. ال التزامن تعليمي قد تساعدك على ممارسة المشكلة، وكيفية إصلاحه.