我有以下课程
public class Guardian {
volatile String response;
private Future future;
private Long time;
}
如果线程A修改了响应,那么线程B将通过以下方式查看响应的新值:
Guardian guardian = requestManager.getGuardian();
String response = guardian.getResponse();
答案 0 :(得分:3)
假设您知道字符串是不可变的,那么是,volatile关键字可以保证线程B将获得 响应 的最后一个值,无论哪个确实发生的线程。
答案 1 :(得分:3)
volatile
关键字阻止变量缓存在线程本地内存中。它阻止的是false positives
,因为您的变量已在主内存中更改,但该更改未反映在本地缓存中。
您的示例将受Race condition的约束,因为它取决于每个线程执行相关操作所花费的时间,但假设不是问题 ,然后是的,你会在JVM中获得该变量的最新版本,因为它没有缓存在线程本地内存中。
答案 2 :(得分:1)
$scope.makeLive = function (row, index)
{
if ($window.confirm("Sure to make it live?Can't edit after making it live.") === true)
{
alert("id====" + row.entity.id);
} else
{
$scope.checkboxValue[index] = false;
return false;
}
};
只返回响应吗?如果是,那么是 - 如果线程A修改guardian.getResponse()
并且线程B之后调用guardian.response
,则线程B将看到新值。
答案 3 :(得分:1)
是。这正是您从volatile关键字获得的保证。
答案 4 :(得分:1)
是强>
volatile
使线程每次都读取实际值,而在常规情况下,线程可以缓存值而不知道其更改