- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 AtomicReference 来实现 AtomicInteger。然而,在测试中,我注意到即使在单线程环境中,一旦 CAS 操作的值达到 128,CAS 操作就会卡住。我是做错了什么还是 AtomicReference 中有警告(可能与 CPU 相关)?这是我的代码:
public class MyAtomInt {
private final AtomicReference<Integer> ref;
public MyAtomInt(int init) {
ref = new AtomicReference<Integer>(init);
}
public MyAtomInt() {
this(0);
}
public void inc() {
while (true) {
int oldVal = ref.get();
int nextVal = oldVal + 1;
boolean success = ref.compareAndSet(oldVal, nextVal); // false once oldVal = 128
if (success) {
return;
}
}
}
public int get() {
return ref.get();
}
static class Task implements Runnable {
private final MyAtomInt myAtomInt;
private final int incCount;
public Task(MyAtomInt myAtomInt, int cnt) {
this.myAtomInt = myAtomInt;
this.incCount = cnt;
}
@Override
public void run() {
for (int i = 0; i < incCount; ++i) {
myAtomInt.inc();
}
}
}
public static void main(String[] args) throws Exception {
MyAtomInt myAtomInt = new MyAtomInt();
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.submit(new Task(new MyAtomInt(), 150)).get();
System.out.println(myAtomInt.get());
exec.shutdown();
}
}
最佳答案
这样做的原因是,当您将 int
装箱到 Integer
中时,您可能会也可能不会创建一个新的 Integer
实例。如果这样做,那么新实例可能与其他 Integer
实例不具有引用相等性,即使它们共享相同的值。 AtomicReference.compareAndSet()
使用引用相等(身份)进行比较。
关键在于编译器如何处理 int
值的自动装箱:它发出对 Integer.valueOf()
的调用。作为一种优化,Integer.valueOf()
有一个装箱整数的缓存,默认情况下该缓存包含最大 128 的值。如果您将一个整数 n
装箱两次,您如果值足够小可以在缓存中,每次都会得到相同的 Integer
引用;否则,您将获得两个单独的实例。
目前,您对旧值进行拆箱,计算新值,当您调用 compareAndSet()
时,您再次对旧值进行装箱。达到 128 后,您将停止获取缓存值,因此第二个盒装副本不再是 AtomicReference
中的副本。
关于java - 为什么 AtomicReference CAS 返回值为 128 的 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209702/
我是 SSO 新手,我希望安装 Jasig CAS 演示 Web 应用程序并能够在其中登录。纯粹的研究和测试。我已经使用 https://wiki.jasig.org/display/CASUM/Se
我还没有找到任何人使用 Python 来通过 CAS 的例子。希望 Kenneth Reitz 可以向我展示“请求”如何让这一切变得简单...... 基本上,我无法通过 CAS 登录...从不验证我的
我正在尝试为一个开源项目编写一个 CAS ( https://en.wikipedia.org/wiki/Central_Authentication_Service) 客户端(使用 phpCAS),
我在本地计算机上建立了一个独立的 CAS 5 实例,用于修补/黑客攻击,并尝试将其设置为独立的 WAR 文件,并通过简单的基于文件的身份验证部署到 Tomcat。 从 WAR Overlay 模板 (
请解释一下 Shibboleth 和 CAS 之间的区别是什么? 最佳答案 第一个 (Shibboleth) 是服务器,第二个 (CAS) 是协议(protocol)。比较Central Authen
CAS(中央身份验证服务)和 Keycloak(身份和访问管理)之间有什么区别? 最佳答案 CAS 不支持 OAuth2,但 Keycloak 支持。这是一个很大的区别。 关于cas - CAS 和
我已使用 Spring 配置 CAS 以进行 SSO。然后我注意到,对于每个请求,CAS 客户端即使在第一次登录后也会联系 CAS 服务器。这正常吗? 这些是服务器操作: 身份验证期间: ACTION
遵循官方 Apereo CAS 文档。我无法理解(经过各种研究和指导)。 如何恢复认证后刚刚登录的用户。项目之间的身份验证和 SSO 正常工作。但是我无法获取有关已登录用户的信息。 这是我在 Appl
我正在将 CAS 与 JDBC 身份验证处理程序一起使用,并且想知道是否有可能在成功身份验证后获取主体对象的其他属性(例如名字、姓氏)而不仅仅是来自 CAS 的用户名? 最佳答案 在 casServi
我们正在开发一个邮件系统,其邮件客户端是Roundcube,使用Zimbra 作为邮件服务器。我的任务是将它们与 CAS 服务器集成,使它们能够单点登录。经过几天的研究,我觉得这是不可能的。 那么如何
我们正在尝试将 CAS 服务器用于我们现有的基于 Web 的应用程序的 SSO。我们的目标是 跨各种应用(包括跨域)实现单点登录。 在重定向到 CAS 服务器登录页面时,为不同的应用程序定制登录(在
我正在尝试使用 CAS 作为我的组织的 SSO 解决方案。使用此解决方案的应用程序之一是 GWT 应用程序,使用 GWTP 作为其 MVP 平台。 当尝试导航到我的应用程序中的某个内部位置时,例如:
在用户和 CAS 之间有一个负载均衡器。负载均衡器将检查是否允许 SSL 证书。但是从负载均衡器到 CAS 的连接将是 HTTP。 如何配置 cas 使其监听 HTTP? 我已经在我的 cas.pro
我在 CAS 中遇到单点注销问题。我使用的是 CAS 服务器 4.2.3 和 Spring 3.2。我的客户端应用程序是在 Spring Security 上配置的。遵循以下文档:http://doc
我正在考虑为 Django 网站设置单点登录。我的搜索将我带到了 django-mama-cas 和 django-cas-ng 但我不确定我是否可以或应该单独或一起使用它们。 django-cas-
我们使用 CAS 5.0 版和 LDAP 身份验证以及 DUO 多重身份验证。 Cas服务器工作正常。然后我们开始将 CAS SSO 集成到我们的应用程序中,此时我们在 java CAS 客户端中遇到
在过去的 3 天里,我一直在尝试从 4.X 服务器更改为 CAS 5.1.x 服务器,并进行了各种搜索和研究,但几乎没有任何进展。每当我删除对 cas-server-webapp-tomcat 的依赖
LDAP 与 MYSQL..JA-SIG CAS 使用 LDAP 与 CAS 使用 MySQL。 现在我们在 LDAP 中有用户 ID、密码和角色,并且正在与 CAS 和 Spring Secuirt
找不到类错误:org.apereo.cas.services.ServiceRegistry]:工厂方法“jsonServiceRegistry” 抛出异常;嵌套异常是 java.lang.NoCla
已经使用过OpenDJ和OpenAM的人们的经验是什么?旧版本似乎可以免费使用,但新版本似乎不是免费使用。它们与现有的商业产品相比如何?与将OpenLDAP与CAS一起使用相比,它们看起来是更好的选择
我是一名优秀的程序员,十分优秀!