0 امتیاز
قبل در برنامه نویسی توسط (426 امتیاز)
ویرایش شده قبل توسط

در این مثال


public void log2(String msg1, String msg2){
       synchronized(this){
          log.writeln(msg1);
          log.writeln(msg2);
       }
}

this همون Monitor Object است دقیقا اینجا چی کار میکنه ؟

از طرفی ایا میشه ابجکت دیگه ای استفاده کرد؟

1 پاسخ

0 امتیاز
قبل توسط (426 امتیاز)
 
بهترین پاسخ
monitor Object رو برای گرفتن lockش استفاده میکنیم از اونجایی که هر ابجکتی در جاوا دارایی lock است پس هر ابجکتی در جاوا متیونه یک monitor Object باشه (که البته مسله اصلی همون lock است کلمه monitor object اذیتت نکنه ) اما اینجا ما اومدیم this رو به عنوان monitor Object معرفی کردیم که synchronized قفلی که نیاز داره بگیره که race condition اتفاق نیفته رو از رویه این ابجکت میگیره از طرفی هر ابجکت فقط یک قفل داره پس هیچ thread دیگه ای نمی تونه وارد این بلاک و هیج بلاک Synchronized دیگه ای که به عنوان Monitor Object بهش this رو دادیم و یا متدی که در تعریفش از کلمه synchronized استفاده کردیم که پشت پرده هم اون داره رویه this کار میکنه بشه پس حالا اگه از این رفتار خوشت نمیاد میتونی یک ابجکت بیخود تعریف کنی که Lock اون گرفته بشه
قبل توسط (426 امتیاز)
خودم به خودم بهترین جواب رو دادم دمم گرم

سوالات مشابه

0 امتیاز
0 پاسخ 339 بازدید
0 امتیاز
1 پاسخ 2.8هزار بازدید
0 امتیاز
0 پاسخ 410 بازدید
+2 امتیاز
1 پاسخ 976 بازدید
0 امتیاز
0 پاسخ 322 بازدید
0 امتیاز
1 پاسخ 133 بازدید
...