Java内存泄漏问题实例:多线程环境下如何避免全局变量引发的泄露?
在多线程环境下,全局变量确实容易引发内存泄漏。因为多个线程可能会同时修改这个全局变量,如果没有同步机制,就会导致数据的不一致,进而造成内存空间无法释放。
以下是一个简单的Java多线程环境下的全局变量内存泄漏示例:
// 全局变量,用于共享数据
public class SharedData {
// 一个可变的值
private int count;
public synchronized int getCount() {
return count;
}
public synchronized void incrementCount() {
count++;
}
}
// 多线程示例
public class MemoryLeakExample implements Runnable {
private SharedData sharedData;
private final Object lock = new Object();
public MemoryLeakExample(SharedData sharedData) {
this.sharedData = sharedData;
}
@Override
public void run() {
while (true) {
// 线程1,增加计数器
synchronized (sharedData.getLock())) {
if (sharedData.getCount() >= 100) {
break; // 超过最大值,退出循环
}
sharedData.incrementCount();
}
// 线程2,检查计数器并打印
synchronized (sharedData.getLock())) {
int count = sharedData.getCount();
if (count % 10 == 0) {
System.out.println("Thread 2: Count is " + count);
}
}
}
}
}
在这个例子中,全局变量SharedData
在两个线程(线程1和线程2)之间共享。没有同步机制,当count
值超过100时,线程1将退出循环。然而,这会导致count
的值在内存中无法释放,形成内存泄漏。
还没有评论,来说两句吧...