الآثار الجانبية لرمي استثناء داخل جملة متزامنة؟

StackOverflow https://stackoverflow.com/questions/2019339

  •  19-09-2019
  •  | 
  •  

سؤال

هل هناك أي آثار جانبية غير واضحة لرمي استثناء من داخل جملة متزامنة؟ ماذا يحدث للقفل؟

private void doSomething() throws Exception {...}

synchronized (lock) {   
    doSomething();       
}
هل كانت مفيدة؟

المحلول

لا أرى أي تأثير جانبي.

ال قفل مضمون ليتم إنهاء في جميع الحالات، واستثناء ليس استثناء (يقصد التورية).

نصائح أخرى

كما نأمل أن يتم إصدار القفل بشكل طبيعي.

للرجوع إليها، القسم المناسب من JLS الذي يضمن هذا السلوك § 14.19:

إذا اكتمال تنفيذ الكتلة بشكل طبيعي، فإن القفل غير مقفلة ويكمل العبارة المتزامنة بشكل طبيعي. في حالة اكتمال تنفيذ الكتلة فجأة لأي سبب من الأسباب، فإن القفل غير مقفلة والبيان المتزامن ثم يكمل فجأة لنفس السبب.

(يتم تحديد "الإنجاز المفاجئ" في مكان آخر في JLS ليشمل استثناءات من JVM، استثناءات مرفوعة throw, واستخدام break, continue, ، أو return بيانات نقل خارج الكتلة.)

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