处理LinkedList删除引发的并发异常

This commit is contained in:
zher52 2021-11-01 14:33:19 +08:00
parent 88b58944bd
commit 40f4c16bd2

View File

@ -7,7 +7,10 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
@ -76,7 +79,7 @@ public class MediaObject implements Serializable {
/**
* 获取所有分块
*/
private LinkedList<MediaPart> mMediaList = new LinkedList<MediaPart>();
private List<MediaPart> mMediaList = new CopyOnWriteArrayList<MediaPart>();
private Lock lock = new ReentrantLock();
@ -225,9 +228,10 @@ public class MediaObject implements Serializable {
if(mMediaList == null){
return;
}
synchronized (mMediaList){
for (MediaPart part : mMediaList) {
consumer.accept(part);
Iterator<MediaPart> iterator = mMediaList.iterator();
synchronized (iterator){
while(iterator.hasNext()){
consumer.accept(iterator.next());
}
}
}
@ -401,7 +405,7 @@ public class MediaObject implements Serializable {
FileUtils.deleteDir(mOutputDirectory);
}
public LinkedList<MediaPart> getMedaParts() {
public List<MediaPart> getMedaParts() {
return mMediaList;
}