java并发内存泄漏的例子
时间: 2024-06-12 15:06:13 浏览: 96
以下是一个可能的java并发内存泄漏的例子:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MemoryLeakExample {
private static final int THREAD_POOL_SIZE = 10;
private static List<Integer> list = new ArrayList<>();
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
for (int i = 0; i < 100; i++) {
executorService.execute(new Runnable() {
@Override
public void run() {
for (int j = 0; j < 1000; j++) {
list.add(j);
}
}
});
}
// Wait for all threads to finish
executorService.shutdown();
while (!executorService.isTerminated()) {
}
System.out.println("List size: " + list.size());
}
}
```
在这个例子中,我们使用了一个固定大小的线程池,每个任务都向一个共享的List中添加1000个整数。由于这个List是共享的,多个线程同时修改它可能会导致并发问题。但是,更严重的问题是内存泄漏。
由于每个任务都会在List中添加1000个整数,而线程池中有100个任务,因此最终List中将包含100000个整数。但是,由于没有对List进行清理,即使所有线程都已经完成,这些整数仍然存在于List中,占用着内存。这就是内存泄漏。
为了避免内存泄漏,我们应该在使用完List之后清理它,例如在所有任务完成后调用`list.clear()`方法。
阅读全文