【发布时间】:2017-07-29 13:17:18
【问题描述】:
基本上我有一个简单的新闻应用程序,现在我想在有人添加或删除新闻时为所有用户自动更新新闻列表,它有点工作但有时我得到 ConcurrentModificationException,我只需要帮助来编写这个方法:
@GetMapping("/pollnews")
@ResponseBody
public DeferredResult<ModelAndView> poll(Model model){
DeferredResult<ModelAndView> result = new DeferredResult<>();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(changeOccured){
changeOccured = false;
model.addAttribute("news", newsService.getAllNews());
result.setResult(new ModelAndView("partial"));
break;
}
}
}
}).start();
return result;
}
堆栈跟踪:
Exception in thread "Thread-13" java.util.ConcurrentModificationException
at java.util.ArrayList.sort(ArrayList.java:1456)
at com.newsapp.SpringNews.Service.NewsService.getAllNews(NewsService.java:25)
at com.newsapp.SpringNews.Controller.ViewController$1.run(ViewController.java:125)
at java.lang.Thread.run(Thread.java:748)
【问题讨论】:
-
您指定异常发生在哪一行?
-
发生在newsService类和getAllnews()方法中,不过没关系,因为我觉得我这个poll()方法写错了,问题可能就在那里……
-
您可以将堆栈跟踪添加到您的问题中吗?因为我看不出你的方法有什么问题
-
您的异常在
NewsService.getAllNews(NewsService.java:25)中,但是您正在显示方法poll()。我们需要getAllNews()。 -
其他问题与问题无关,但已发布代码。每次调用
/pollnews时,您的poll()方法都会生成一个新线程,并且while(true)将永远不会退出。这会导致一段时间内存不足。
标签: java ajax spring concurrency long-polling