欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java死鎖和內存泄露

李昊宇1年前8瀏覽0評論

對于Java程序員來說,死鎖和內存泄露是兩個非常常見的問題。那么什么是死鎖和內存泄露呢?

死鎖

死鎖是指兩個或多個進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力干涉那它們都無法推進下去。

public class DeadLockDemo {
private static Object resource1 = new Object();
private static Object resource2 = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(() ->{
synchronized (resource1) {
try {
System.out.println("Thread1 is holding the resource1, going to sleep...");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread1 is trying to get resource2...");
synchronized (resource2) {
System.out.println("Thread1 gets resource2!");
}
}
});
Thread t2 = new Thread(() ->{
synchronized (resource2) {
try {
System.out.println("Thread2 is holding the resource2, going to sleep...");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread2 is trying to get resource1...");
synchronized (resource1) {
System.out.println("Thread2 gets resource1!");
}
}
});
t1.start();
t2.start();
}
}

上面的代碼就是一個經典的死鎖例子。線程1持有resource1,等待獲取resource2,而線程2持有resource2,等待獲取resource1。因此,程序會被卡住,無法繼續執行。

內存泄露

內存泄漏是指程序在使用動態分配內存時,由于某種原因導致程序無法將已經申請的內存空間釋放,這部分內存便成為了“內存泄漏”。隨著程序的執行,累積了大量無用的內存,導致程序越來越占用內存資源,最終導致程序或系統崩潰。

public class MemoryLeakDemo {
private Listlist = new ArrayList<>();
public void add(Integer i) {
list.add(i);
}
public static void main(String[] args) {
MemoryLeakDemo demo = new MemoryLeakDemo();
for (int i = 0; i< Integer.MAX_VALUE; i++) {
demo.add(i);
}
}
}

上面的代碼演示了如何產生內存泄露。在程序中,不斷向一個List中添加整數,而這個List卻沒有被清空或釋放。因此,隨著循環次數的增加,這個List中的元素會越來越多,占用越來越多的空間,直到程序或系統崩潰。