A是AbstractCollection的子类。
final A a = new A();
... //Add some objects into a
ExecutorService es = Executors.newFixedThreadPool(1);
Future f1 = es.submit(new Callable<B>() {
public B call() {
... //Modify the objects in a
return B;
}
});
f1.get();
... //Read a
现在的问题是,当我读到a时,修改不存在。根据java文档:“异步计算所采取的操作发生在另一个线程中相应的Future.get()之后的操作之前”。所以我想知道为什么会出现这种不一致的情况。非常感谢任何帮助。
答案 0 :(得分:2)
我用一些标准对象重新编写了你的例子,它似乎运行良好:
public static void main(String[] args) throws Throwable
{
final StringBuffer a = new StringBuffer();
a.append("a");
ExecutorService es = Executors.newFixedThreadPool(1);
Future<String> f1 = es.submit(new Callable<String>()
{
@Override
public String call()
{
a.append("b");
return "done";
}
});
f1.get();
System.out.println(a.toString());
es.shutdownNow();
}
如果您使用的是良好的IDE,您可以随时断点代码以查看实际的并发行为。
也许您的问题在A
课程内。