Java线程侦听器
我想创建一个可运行的类,其中包含一个列表。运行时,线程将侦听任何列表更改并处理其中的所有元素。那是我的主意 下面是我的代码,但当我将新元素添加到列表或由更改的列表时,它仍然不会执行process()。请给我一些帮助Java线程侦听器,java,list,queue,runnable,Java,List,Queue,Runnable,我想创建一个可运行的类,其中包含一个列表。运行时,线程将侦听任何列表更改并处理其中的所有元素。那是我的主意 下面是我的代码,但当我将新元素添加到列表或由更改的列表时,它仍然不会执行process()。请给我一些帮助 public class QueueService implements Runnable { private List<Request> requestQueue; public synchronized void add(Request reque
public class QueueService implements Runnable {
private List<Request> requestQueue;
public synchronized void add(Request request) {
if (requestQueue == null) {
requestQueue = new LinkedList<Request>();
}
requestQueue.add(request);
LOGGER.info("Added new request");
}
@Override
public void run() {
LOGGER.info("Queue started...");
while (true) {
if (requestQueue != null) {
process();
}
}
}
private synchronized void process() {
try {
Iterator<VMRequest> requests = requestQueue.iterator();
while(requests.hasNext()) {
Request req = requests.next();
// process each element and remove when done
}
} catch (Exception e) {
LOGGER.info(e.getMessage());
}
}
}
公共类队列服务实现可运行{
私有列表请求队列;
公共同步作废添加(请求){
if(requestQueue==null){
requestQueue=newlinkedlist();
}
添加(请求);
LOGGER.info(“新增请求”);
}
@凌驾
公开募捐{
info(“队列已启动…”);
while(true){
if(requestQueue!=null){
过程();
}
}
}
私有同步无效进程(){
试一试{
迭代器请求=requestQueue.Iterator();
while(requests.hasNext()){
Request req=requests.next();
//处理每个元素,完成后移除
}
}捕获(例外e){
LOGGER.info(例如getMessage());
}
}
}
请理解,这根本不起作用,它告诉我们什么都没有。向我们解释你期望发生什么以及为什么。向我们解释实际发生的情况。在您的运行中放入无限循环
方法以侦听队列。在列表中出现任何内容之前,它已退出。@SotiriosDelimanolis,请查看我的编辑帖子。@Adi我使用无限循环编辑了我的帖子,但它仍然不起作用。既然这似乎正是您想要的,为什么不使用a?