سؤال

وماذا يعني هذا جافا كود يعني؟ هل الحصول على تأمين على كافة الكائنات من MyClass؟

synchronized(MyClass.class) {
   //is all objects of MyClass are thread-safe now ??
}

وكيف رمز يختلف أعلاه من هذا واحد:

synchronized(this) {
   //is all objects of MyClass are thread-safe now ??
}
هل كانت مفيدة؟

المحلول

ويستخدم synchronized(X.class) المتكررة مثيل فئة كشاشة. كما أن هناك مثيل فئة واحدة فقط (وجوه تمثل الفوقية الفئة في وقت التشغيل) مؤشر واحد يمكن أن يكون في هذه الكتلة.

ومع synchronized(this) يخضع لحراسة كتلة من المثيل. عن كل واقعة مؤشر واحد فقط يمكن أن تدخل الكتلة.

يستخدم

وsynchronized(X.class) للتأكد من أن هناك واحد بالضبط الموضوع في الكتلة. يضمن synchronized(this) أن هناك بالضبط موضوع واحد لكل مثيل. إذا كان هذا يجعل الرمز الفعلي في كتلة موضوع آمنة يعتمد على التنفيذ. إذا تنضج دولة فقط من synchronized(this) المثال بما فيه الكفاية.

نصائح أخرى

لإضافة إلى إجابات أخرى:

static void myMethod() {
  synchronized(MyClass.class) {
    //code
  }
}

وما يعادل

static synchronized void myMethod() {
  //code
}

و

void myMethod() {
  synchronized(this) {
    //code
  }
}

وما يعادل

synchronized void myMethod() {
  //code
}

لا، أولا والحصول على تأمين على تعريف الفئة من MyClass، وليس كل الحالات من ذلك. ومع ذلك، إذا ما استخدمت في مثيل، وهذا سوف تمنع بالفعل كل حالات أخرى، لأنها تشترك في تعريف فئة واحدة.

ووالثاني سيحصل على تأمين على سبيل المثال الحالي فقط.

وحول ما إذا كان هذا يجعل الأشياء الخاصة بك موضوع آمنة، وهذا هو سؤال أكثر تعقيدا بكثير - كنا بحاجة لرؤية الشفرة

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