【发布时间】:2015-01-21 11:33:10
【问题描述】:
使用 Ajax 请求从 .jsp 页面访问 ResourceMapping“过滤器”。
我的理解是Spring每次都会创建一个新的执行线程 访问资源“过滤器”。因为 FilterItems 是一个 Spring @Component bean 因此,如果是单例,那么多个线程(通过调用资源“过滤器”创建)将访问同一个实例。 每次调用“filter”时都会实例化一个新的 FilterItems 实例 资源,因为每个实例不在线程之间共享,所以这是线程安全的?
是调用 FilterItems.filter1 & FilterItems.filter2 线程安全?
@Controller
@RequestMapping("VIEW")
public class MyController {
@ResourceMapping(value = "filter")
public void filter(){
FilterItems t = new FilterItems();
LinkedList<MyObj> l = new LinkedList<MyObj>();
l.add(new MyObj("1"));
l.add(new MyObj("2"));
System.out.println("size is : " + l.size());
t.filterItem1(l);
System.out.println("size is : " + l.size());
t.filterItem2(l);
System.out.println("size is : " + l.size());
}
}
*****************************************************************************
import java.util.Iterator;
import java.util.LinkedList;
@Component
public class FilterItems {
public void filterItem1(LinkedList<MyObj> l) {
Iterator<MyObj> iter = l.iterator();
while (iter.hasNext()) {
MyObj myObj = iter.next();
if (myObj.param.equalsIgnoreCase("1")) {
iter.remove();
}
}
}
public void filterItem2(LinkedList<MyObj> l) {
Iterator<MyObj> iter = l.iterator();
while (iter.hasNext()) {
MyObj myObj = iter.next();
if (myObj.param.equalsIgnoreCase("2")) {
iter.remove();
}
}
}
private static class MyObj {
public final String param;
public MyObj(String param) {
this.param = param;
}
}
}
【问题讨论】:
标签: java multithreading spring