gpt4 book ai didi

java - 使用 volatile 使枚举线程安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:18 30 4
gpt4 key购买 nike

我有 runnable,它正在从互联网上下载一些文件,它看起来如下:

class Downloader implements Runnable {
volatile Status status;
public void run() {
// ...
while (status.isInProgress()) { ... }
}
}

状态如下:

public enum Status {
PAUSED {
public int someData() { return 0; }
},
INPROGRESS {
public int someData() { return 1; }
}

public abstract int someData();

private String msg;
public String getSomeMsg() {
return msg;
}
public void setSomeMsg(String s) {
msg=s;
}

public boolean isInProgress() {
return this == INPROGRESS;
}
}

当用户按下暂停按钮时,状态变量从 GUI 线程设置为暂停。

代码使用java 1.6编译,针对Android平台编译。

我的问题是这样设置/读取 Enum 是否是线程安全的?我在这里阅读了很棒的文章:

http://javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html

我非常相信它是保存的,但它并没有说明枚举。

最佳答案

根据this页面可以对基元和对象(包括枚举)使用 volatile。此外,这是 volatile 键的典型用法,如您所见 here .

注意:假设您的循环在完成时会中断(因为您没有定义 DONE 枚举值),最坏的情况是 (i) 用户暂停并且 (ii) 下载在下一次迭代之前完成。在这种情况下,用户单击暂停,但会看到“下载完成”消息。

关于java - 使用 volatile 使枚举线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12695133/

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