سؤال

إعطاء هذا الرمز:

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 ضمانات الذرية، وليس أي شيء فيما يتعلق بالترتيب، ولكن يمكنك فرض ترتيب من خلال انتظار تغيير العلم. على أي حال، ما تحاول إنفاذه هو التتابع. وبعد تحصل على هذا مجانا في البيئات المفردة :)

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