小编Zoh*_*qui的帖子

如何在liferay中重新获得Login Portlet

我是liferay 5.1技术的新手.

我错误地删除了登录portlet,现在我无法登录到应用程序.

我的意思是登录portlet不再可见,任何帮助都会有很大的帮助.

portlet invisible login liferay

5
推荐指数
2
解决办法
1万
查看次数

挥发性是线程安全的,那么AtomicInteger有什么需要

就像AtomicInteger一样,它也是线程安全的,因为我已经按照理论上讲过了使它成为线程安全的代码和技术

在计算机科学中,比较交换(CAS)是多线程中用于实现同步的原子指令。它将存储位置的内容与给定值进行比较,并且只有它们相同时,才将该存储位置的内容修改为给定的新值。这是作为单个原子操作完成的。原子性保证了根据最新信息计算新值;如果与此同时值已由另一个线程更新,则写入将失败。操作的结果必须表明它是否执行了替换;这可以通过简单的布尔响应(此变量通常称为“比较设置”)来完成,也可以通过返回从内存位置读取的值(而不是写入该值)来完成。

我看过AtomicInteger类的代码

public final int getAndIncrement() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return current;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题,如果我使一个变量成为线程安全的,只需声明它为volatile。因此所有读取该变量的线程都将获得最新值。谁能解释给我,当我们有VOLATILE关键字使变量线程安全时,为什么要有AtomicInteger类使变量线程安全。volatile关键字相对于AtomicInteger的优点是什么。

如果我们声明volatile long和volatile double是线程安全的,如果不是,那么为什么它们不是线程安全的。而没有volatile的int是线程安全的。请解释

java multithreading atomic volatile

2
推荐指数
1
解决办法
576
查看次数

标签 统计

atomic ×1

invisible ×1

java ×1

liferay ×1

login ×1

multithreading ×1

portlet ×1

volatile ×1