在提交給執行程序服務(具有無限隊列的單線程)後是否可以修改可運行對象?在提交給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方法正在做一些非常密集的事情,隨後的提交會排隊。