JAVA枚举 线程安全_java – 使用volatile来使枚举线程安全

我有一个从网上下载一些文件的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线程设置为PAUSED.

代码是用java 1.6编译的,并且是为Android平台编译的.

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

而且我确信这是拯救,但它并没有说明很多关于枚举的内容.

解决方法:

因此,对于this页面,可以使用包含基元和对象的volatile(包括枚举).此外,这是挥发性关键字的典型用法,如您所见,here.

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

标签:java,android

来源: https://codeday.me/bug/20190620/1247640.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值