gpt4 book ai didi

android - 要强制取消 AsyncTask,doInBackground 中定期检查的标志不应该是易变的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:36 26 4
gpt4 key购买 nike

我想强制取消 AsyncTask。我看到你可以使用 isCancelled()喜欢in this valid solution (在引擎盖下使用 AtomicBoolean

但我看到类似 suspiciousSolution1 的解决方案, suspiciousSolution2 , suspiciousSolution3其中引入了新标志 private boolean isTaskCancelled = false;

我开始怀疑 - 因为那个标志被修改了

public void cancelTask(){
isTaskCancelled = true;
}

在某个线程上运行,并被读入

protected Void doInBackground( Void... ignoredParams ) {
//Do some stuff
if (isTaskCancelled()){
return;
}
}

WorkerThread 中运行,那么标志 isTaskCancelled 不应该是易变的(或 AtomicBoolean,如谷歌的实现)。

最佳答案

是的,应该是volatile。否则,由于优化(通过编译器、JVM 等),线程 A 中的变量写入可能对线程 B 中的读取不可见。参见 this

关于android - 要强制取消 AsyncTask,doInBackground 中定期检查的标志不应该是易变的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38392673/

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