مشخصات مقاله
-
1654
-
0.0
-
3615
-
0
-
0
آموزش Java – استفاده از monitor reentrant یا قفل های قابل استفاده ی مجدد در Java
آموزش Java – استفاده از monitor reentrant یا قفل های قابل استفاده ی مجدد در Java
طبق گفته های شرکت Sun Microsystems، قفل یا monitor های جاوا reentrant هستند، بدین معنی که اگر متدی از داخل متدی دیگر که synchronized هست، فراخوانی شود، thread می تواند از همان monitor برای هر دو متد استفاده کند.
مزیت استفاده از Reentrant monitor در Java
از رخداد deadlock در یک برنامه ی تک thread ای جلوگیری می کند (single thread deadlocking). به عبارت دیگر اجازه نمی دهد یک thread خود را در وضعیت deadlock قرار دهد.
در زیر مثالی را مشاهده می کنید که در آن مفهوم reentrant monitor به صورت عملی نمایش داده شده است:
class Reentrant {
public synchronized void m() {
n();
System.out.println("this is m() method");
}
public synchronized void n() {
System.out.println("this is n() method");
}
}
در این کلاس متدهای m() و n() هر دو synchronized هستند. متد m() متد n() را داخل خود صدا می زند.
در نمونه ی زیر متد m() را بر روی آبجکت thread فراخوانی می کنیم. در کلاس جاری، آبجکت thread را با استفاده از کلاس فاقد نام (anonymous) ایجاد می کنیم.
public class ReentrantExample{
public static void main(String args[]){
final ReentrantExample re=new ReentrantExample();
Thread t1=new Thread(){
public void run(){
re.m();//calling method of Reentrant class
}
};
t1.start();
}}
خروجی:
this is n() method this is m() method