سؤال

ولدينا اثنين من المواضيع الحصول على قائمة واحدة عبر طريقة متزامنة. يمكننا

وأ) تعتمد على وقت التشغيل للتأكد من أن كل واحد منهم سيحصلون على الوصول إلى طريقة بناء على أمر حاولوا أو

وب) لا على VM متابعة أي قواعد أخرى

وج) هناك طريقة أفضل لتسلسل الطلبات؟

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

المحلول

لا، وتزامن ومنح حق الوصول في أي أمر (يعتمد على تنفيذ JVM). وهذا يمكن أن يسبب حتى المواضيع لتجويع في بعض الحالات.

ويمكنك التأكد من أمر باستخدام <لأ href = "http://java.sun.com/javase/6/docs/api/java/util/concurrent/locks/ReentrantLock.html" يختلط = "noreferrer" > ReentrantLock (ومنذ جافا 5.0) مع خيار fair=true. (Lock lock = new ReentrantLock(true);)

نصائح أخرى

لا لا يمكنك أن تكون على يقين من أن اثنين من المكالمات إلى أسلوب تزامن سيحدث في النظام. النظام هو غير محدد وتنفيذ تعتمد.

ويعرف هذا في 17.1 أقفال قسم من JLS. لاحظ أن هو لا يقول شيئا عن الترتيب الذي المواضيع انتظار على تأمين يجب الوصول.

وأنت لا يمكن الاعتماد على الترتيب الذي يتم استدعاء أسلوب معين من كل المواضيع. إذا كان يمكن أن يكون اثنين فقط عن المواضيع نعم. ولكن تخيل إذا كان هناك 3 المواضيع و1 موضوع حصلت بالفعل الوصول. و2 المواضيع الأخرى عندما يحاولون الوصول إلى الانتظار وأي واحد منهم يمكن أن تمنح الوصول، وهذا لا يتوقف على الترتيب الذي وصفوه هذا الأسلوب. لذلك، لا يقترح أن تعتمد على النظام.

وأنا دائما ترك المصاحبة إلى خادم التطبيق أو محرك ما لم تحدد كثافة الخاصة

نعم.

إذا كان الوصول إلى القائمة هو عبر طريقة متزامنة واحد، ويمكن إجراء تسلسل

والطلبات المتزامنة من المواضيع متعددة.

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