怎么使用一线程实时监控一个arraylist的长度()
如何使用一线程实时监控一个arraylist的长度(求助)
模拟场景:从数据源每读取一行数据后,保存在arraylist中。线程起到监控arraylist长度的功能,当arraylist长度大于等于5时,便将这5行数据打包发送,并清除arraylist中数据,然后继续监听,重复上述过程。请问各位大致该怎么实现阿,本人新手啊
------解决思路----------------------
简单实现了下,代码仅供参考
------解决思路----------------------
其实不用线程更好
模拟场景:从数据源每读取一行数据后,保存在arraylist中。线程起到监控arraylist长度的功能,当arraylist长度大于等于5时,便将这5行数据打包发送,并清除arraylist中数据,然后继续监听,重复上述过程。请问各位大致该怎么实现阿,本人新手啊
------解决思路----------------------
简单实现了下,代码仅供参考
import java.util.Arrays;
import java.util.LinkedList;
/**
* @author zhuangqing
*/
public class MoniterTest {
public static void main(String[] args) {
DataHandler dataHandler = DataHandler.getInstance();
//模拟连续添加1000条数据
for (int i = 0; i < 1000; i++) {
dataHandler.addData(i);
}
}
}
class DataHandler {
private LinkedList<Integer> linkedList = new LinkedList<Integer>();
public static final int BATCH_SIZE = 5;
private static final DataHandler instance = new DataHandler();
private DataHandler() {
//监听线程
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
if (linkedList.size() >= BATCH_SIZE) {
int[] sendData = new int[BATCH_SIZE];
for (int i = 0; i < BATCH_SIZE; i++) {
sendData[i] = linkedList.removeFirst();
}
System.out.println("send data --> " + Arrays.toString(sendData));
}
Thread.sleep(100);
} catch (InterruptedException ignore) {}
}
}
}).start();
}
/**
* 单例实现
* @return
*/
public static DataHandler getInstance() {
return instance;
}
/**
* 添加数据
* @param data
*/
public void addData(int data) {
linkedList.addLast(data);
}
}
------解决思路----------------------
其实不用线程更好
import java.util.ArrayList;
public class MyList extends ArrayList<Object> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public boolean add(Object e) {
boolean flag =super.add(e);
if(this.size()>=5){
//发送数据
}
return flag;
}
}