小编Bri*_*ian的帖子

CompletableFutures 线程安全吗?

我有一个调用两个单独线程的线程。CompletableFuture它向这两个子线程传递相同的内容。如果.get()同时在这两个线程中调用,我会遇到任何类型的并发问题吗?

\n
    \n
  • 它会腐蚀吗CompletableFuture
  • \n
  • 我是否有可能看不到对返回的对象所做的最后更改.get()
  • \n
  • 如果我之后修改该对象怎么办?
  • \n
\n

作为一个具体的例子,在下面的代码中,假设完成cfInput.get()后返回的对象没有发生任何变化,两个线程是否有可能打印不同的值?cfInput

\n
public void mainClass(CompletableFuture<ObjA> cfInput){\n  class1.doAsync1(cfInput);\n  class2.doAsync2(cfInput);\n}\n\n@Async\npublic void doAsync1(CompletableFuture<ObjA> cfInput){\n  //logic\n  System.out.println(cfInput.get().getObjB().getBlah());\n  //logic\n}\n\n@Async\npublic void doAsync2(CompletableFuture<ObjA> cfInput){\n  //logic\n  System.out.println(cfInput.get().getObjB().getBlah());\n  //logic\n}\n\npublic class ObjA{\n  private ObjB objB;\n  public ObjB getObjB();\n  public void setObjB();\n}\npublic class ObjB{\n  private String blah;\n  public String getBlah();\n  public void setBlah();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

java multithreading completable-future spring-async

3
推荐指数
1
解决办法
2321
查看次数