Tag: primefaces性

有没有理由不总是使用AtomicInteger作为数据成员?

在像Android这样的multithreading环境中,一个简单的int变量可能被多个线程操纵,在哪种情况下仍然有理由使用int作为数据成员? 作为局部变量的int ,仅限于具有独占访问权限的方法的范围(因此开始和完成修改它总是在同一个线程中),在性能方面完全有意义。 但作为数据成员,即使由访问器包装,它也可能遇到众所周知的并发交错修改问题。 所以看起来“玩得安全”可以全面使用AtomicInteger 。 但这似乎非常低效。 你能带一个线程安全的int数据成员用法的例子吗?

什么是primefaces?

这是两个primefaces操作: int value = 5; Object obj = new Object(); 但是当使用原语作为方法参数时,这会被视为primefaces操作: public void setValue(int val, Object obj){ this.value = val; // Atomic? this.obj = obj; // Not atomic? } public void setValue(int val, Object obj){ this.value = val; // Atomic? this.obj = obj; // Not atomic? } ? 对象引用的副本不是primefaces的,因为它包含读取和写入,对吧? 说对象引用进行primefaces操作的唯一方法是将其声明为null或为其分配新对象,如: Object obj = null; 和 […]

AtomicReference.compareAndSet()用于确定什么?

说你有以下课程 public class AccessStatistics { private final int noPages, noErrors; public AccessStatistics(int noPages, int noErrors) { this.noPages = noPages; this.noErrors = noErrors; } public int getNoPages() { return noPages; } public int getNoErrors() { return noErrors; } } 并执行以下代码 private AtomicReference stats = new AtomicReference(new AccessStatistics(0, 0)); public void incrementPageCount(boolean wasError) { AccessStatistics prev, newValue; […]

字节码指令与处理器操作之间的关系

Java规范保证原始变量赋值始终是primefaces的(期望long和双types 。 相反,对应于着名的i++增量操作的Fetch-and-Add操作将是非primefaces的,因为导致读 – 修改 – 写操作。 假设这段代码: public void assign(int b) { int a = b; } 生成的字节码是: public void assign(int); Code: 0: iload_1 1: istore_2 2: return 因此,我们看到赋值由两个步骤组成(加载和存储)。 假设这段代码: public void assign(int b) { int i = b++; } 字节码: public void assign(int); Code: 0: iload_1 1: iinc 1, 1 //extra step here […]

什么是J bloch使用的“失败primefaces性”以及它对不可变对象的益处?

刚刚看到下面的声明作为immutable object好处 不可变对象总是具有“失败primefaces性”(Joshua Bloch使用的术语):如果不可变对象抛出exception,它永远不会处于不合需要或不确定状态。 任何人都可以更详细地解释它,为什么会这样呢?

primefaces操作和multithreading

最近我正在阅读一个教程,因为我遇到了一个声明说… “Java语言规范保证读取或写入变量是一个primefaces操作(除非变量是long或double类型)。类型为long或double操作变量只有在使用volatile关键字声明时才是primefaces的。” AtomicInteger或AtomicLong提供像getAndDecrement() , getAndIncrement()和getAndSet()这样的方法。 我对上述陈述感到困惑。你能否澄清何时使用 AtomicInteger或AtomicLong类。

如何在将其发送到另一种方法时每隔30秒清空番石榴缓存?

我通过调用add方法从多个线程填充我的guava缓存。 现在从每30秒运行一次的后台线程,我想以primefaces方式将缓存中的任何内容发送到sendToDB方法? 以下是我的代码: public class Example { private final ScheduledExecutorService executorService = Executors .newSingleThreadScheduledExecutor(); private final Cache<Integer, List> cache = CacheBuilder.newBuilder().maximumSize(100000) .removalListener(RemovalListeners.asynchronous(new CustomRemovalListener(), executorService)) .build(); private static class Holder { private static final Example INSTANCE = new Example(); } public static Example getInstance() { return Holder.INSTANCE; } private Example() { executorService.scheduleAtFixedRate(new Runnable() { @Override public […]