فهم متزامنة.
-
19-09-2019 - |
سؤال
إعطاء هذا الرمز:
public class Messager implements Runnable {
public static void main(String[] args) {
new Thread(new Messager("Wallace")).start();
new Thread(new Messager("Gromit")).start();
}
private String name;
public Messager(String name) { this.name = name; }
public void run() {
message(1); message(2);
}
private synchronized void message(int n) {
System.out.print(name + "-" + n + " ");
}
}
أنا أفهم أن synchronized
الكلمة الرئيسية تجعل الخيط يعتمد على قفل الكائن. أسئلة:
أ) هو القفل الذي صدر بمجرد وضع علامة synchronized
التشطيبات؟ أو بمجرد الموضوع run()
طريقة التشطيبات ب) هل يمكنني التأكد من أن أي واحد من المواضيع سوف يطبع اسمه و 1 2
قبل الآخر؟
المحلول
نعم نعم. تم إصداره بمجرد synchronized
انتهاء وظيفة.
نعم. يمكنك، ولكن إذا كنت ترغب في القيام بذلك، فلماذا تكتب رمز متعدد المراقبين في المقام الأول؟ synchronized
ضمانات الذرية، وليس أي شيء فيما يتعلق بالترتيب، ولكن يمكنك فرض ترتيب من خلال انتظار تغيير العلم. على أي حال، ما تحاول إنفاذه هو التتابع. وبعد تحصل على هذا مجانا في البيئات المفردة :)
لا تنتمي إلى StackOverflow