多线程同时增加和获取数据的情况:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
new Main().test();
}
private List mData = new ArrayList<>();
private List mCloneData;
private int count = 0;
public void test() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
mData.add(count++ + "");
mCloneData = null;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
for (String string : getData()) {
System.out.println(string);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
private List getData() {
if (mCloneData == null) {
mCloneData = new ArrayList<>(mData);
}
return mCloneData;
}
}
多线程同时增加、获取和删除数据的情况:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
new Main().test();
}
private List mData = new ArrayList<>();
private List mCloneData;
private int count = 0;
public void test() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
synchronized (mData) {
mData.add(count++ + "");
}
mCloneData = null;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
for (String string : getData()) {
System.out.println(string);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
synchronized (mData) {
Iterator iterator = mData.iterator();
int i = 0;
while (iterator.hasNext()) {
String string = iterator.next();
int code = count - 1;
if (string.equals(code + "")) {
iterator.remove();
}
if (i < 5) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
i++;
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
private List getData() {
if (mCloneData == null) {
mCloneData = new ArrayList<>(mData);
}
return mCloneData;
}
}
参考链接: