gpt4 book ai didi

Java 并发 : Changes made by task submitted to executor visible after future. get()

转载 作者:行者123 更新时间:2023-11-29 05:22:40 24 4
gpt4 key购买 nike

假设提交给执行器池的任务是这样的

class Task implements Future<Boolean> {
public HeavyClass heavyClass;
public Task(HeavyClass heavyClass) {
this.heavyClass = heavyClass;
}

public Boolean call() {
try {
//do changes to heavyClass
return true;
} catch(Exception e) {
return false;
}
}

现在在我做的调用线程中

Future<boolean> future = executor.submit(new Task(heavyClass));
try {
boolean success = future.get();
if (success) {
//Assume all changes made to heavyClass are visible
}
}

这是正确的吗?根据我的理解,这并不完全正确。在这种情况下确保纠正的最佳方法是什么?

最佳答案

这应该没问题。 Future 的任何可行实现都需要以这样一种方式编写,即标记为已完成涉及发布栅栏,而完成检查涉及获取栅栏。当 Future 标记为已完成时,应刷新对 heavyClass 的所有先前更改,并且应保证在任务的完成状态可见时对其他线程可见.

当然,依赖于此意味着相信实现执行器的人知道他们在做什么。如果您使用的是核心 Java 执行器之一,应该没问题。

关于Java 并发 : Changes made by task submitted to executor visible after future. get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24062816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com