مشخصات مقاله
-
1227
-
0.0
-
3022
-
0
-
0
آموزش Java – وضعیت Deadlock در مبحث synchronization Java
آموزش Java – وضعیت Deadlock در مبحث synchronization Java
در جاوا (Java) Deadlock بخشی از مبحث پردازش موازی (multithreading) و مدیریت دسترسی thread ها به منابع یا همان synchronization است. Deadlock که معادل فارسی آن بن بست می باشد به شرایطی اشاره دارد که در آن چند thread می خواهند به یک منبع دسترسی داشته باشند، هر thread بر روی منبع مورد نظر lock اعمال کرده و تا اتمام عملیات آن را برنمی دارد. در این میان thread دیگری منتظر است که کار thread قبلی تمام شده، قفل را بردارد تا این thread بتواند به آن منبع دسترسی داشته باشد. از آنجایی که هر دو thread متنظرند تا دیگری قفل را از روی منبع برداشته و آن را آزاد کند، به این وضعیت deadlock گفته می شود.
نمونه ی واقعی از رخداد وضعیت deadlock در Java
public class TestDeadlockExample1 {
public static void main(String[] args) {
final String resource1 = "ratan jaiswal";
final String resource2 = "vimal jaiswal";
// t1 tries to lock resource1 then resource2
Thread t1 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try { Thread.sleep(100);} catch (Exception e) {}
synchronized (resource2) {
System.out.println("Thread 1: locked resource 2");
}
}
}
};
// t2 tries to lock resource2 then resource1
Thread t2 = new Thread() {
public void run() {
synchronized (resource2) {
System.out.println("Thread 2: locked resource 2");
try { Thread.sleep(100);} catch (Exception e) {}
synchronized (resource1) {
System.out.println("Thread 2: locked resource 1");
}
}
}
};
t1.start();
t2.start();
}
}
خروجی:
Thread 1: locked resource 1 Thread 2: locked resource 2