java并发内存泄漏的例子
时间: 2023-10-20 12:07:35 浏览: 89
以下是一个例子,展示了Java中可能发生的并发内存泄漏问题:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MemoryLeakExample {
private static ExecutorService executorService = Executors.newFixedThreadPool(10);
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
executorService.execute(new Task(i));
}
executorService.shutdown();
}
static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
// do some work
}
}
}
```
在这个例子中,我们使用了一个固定大小的线程池来执行一些任务。然而,我们没有显式地关闭这个线程池,这可能会导致内存泄漏问题。
具体地说,如果我们在执行任务的同时,向线程池中不断添加新的任务,那么线程池就会一直存在。如果这个过程持续很长时间,那么就会有越来越多的线程被创建,并且它们的内存占用也会越来越大。最终,这可能会导致OutOfMemoryError,从而使程序崩溃。
解决这个问题的办法很简单:在使用完线程池后,一定要调用shutdown()方法来关闭它。这样可以确保所有线程都被正确地终止,并且释放它们占用的内存。
阅读全文