在提交给执行程序服务(具有无限队列的单线程)后是否可以修改可运行对象?在提交给ExecutorService后修改可运行对象?
例如:
public class Test {
@Autowired
private Runner userRunner;
@Autowired
private ExecutorService executorService;
public void init() {
for (int i = 0; i < 100; ++i) {
userRunner.add("Temp" + i);
Future runnerFuture = executorService.submit(userRunner);
}
}
}
public class Runner implements Runnable {
private List<String> users = new ArrayList<>();
public void add(String user) {
users.add(user);
}
public void run() {
/* Something here to do with users*/
}
}
正如你可以在上面的例子中看到,如果我们提交一个Runnable对象并修改对象的内容过于循环内,将第一次提交给执行程序服务使用新增用户。考虑一下,run方法正在做一些非常密集的事情,随后的提交会排队。