- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这可能看起来很愚蠢,但我无法得到这个。 VolatileCachedFactorizer 保留 OneValueCache 的实例并在每次调用中重新初始化它。这个分配不应该在同步块(synchronized block)中完成吗?
@Immutable
class OneValueCache {
private final BigInteger lastNumber;
private final BigInteger[] lastFactors;
public OneValueCache(BigInteger i, BigInteger[] factors) {
lastNumber = i;
lastFactors = Arrays.copyOf(factors, factors.length);
}
public BigInteger[] getFactors(BigInteger i) {
if (lastNumber == null || !lastNumber.equals(i))
return null;
else
return Arrays.copyOf(lastFactors, lastFactors.length);
}
}
public class VolatileCachedFactorizer implements Servlet {
private volatile OneValueCache cache =
new OneValueCache(null, null);
public void service(ServletRequest req, ServletResponse resp) {
BigInteger i = extractFromRequest(req);
BigInteger[] factors = cache.getFactors(i);
if (factors == null) {
factors = factor(i);
cache = new OneValueCache(i, factors); // is this line ok?
}
encodeIntoResponse(resp, factors);
}
}
最佳答案
cache
变量是 volatile
。这意味着对它的写入操作发生在观察写入值的后续读取操作之前。因此,相关对象已安全地发布到其他线程,无需进一步同步。
请注意,由于 OneValueCache
是一个不可变的类,即使没有 volatile (“通过数据竞争发布”),代码仍然是线程安全的,因为线程如果观察到一个对象,就可以保证观察到它完全初始化。但是,如果没有 volatile
,就无法保证该对象的引用将被另一个线程观察到。
关于java - 这段代码来自 Java Concurrency inpractice ThreadSafe 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098138/
我知道链表不是线程安全的,在工作中我被要求编写一个简单的线程安全链表。 由于我不会经历的各种复杂情况,我不能简单地包装LinkedList,而需要编写LinkedList的实现 我猜我需要这个,但是我
在《Java Concurrency in Practice》一书中,您可以找到以下代码: @ThreadSafe public class SafePoint { @GuardedBy("t
我正在编写一个静态实用程序方法。我知道方法 isEmpty() 、 isNew() 是线程安全的。在 getTotal(...) 方法中,我使用 StringBuilder 作为与 String 和
我刚刚遇到了一个BNF Grammar for JAVA 。其中,“修饰符”有一个称为“threadsafe”的终结符号。但是,我以前从未见过它,也无法在《Java 语言规范》Java SE 7 版
我有一个多行文本框,它使用 threadsafe 方法来调用它。在每个新文本之后,插入符号(光标)转到第一行位置和多行文本。我无法阅读最后几行。 我尝试使用: textBox.CaretIndex
假设我有一个 CarSystem 类,其中有一组 CarParts 对象。现在我想给系统写一个立体声插件,我希望所有插件的格式是: public interface ICarPluginMetaDat
我已经完全重写了这个问题,因为希望我能通过这种方式得到一些更有用的答案。 我有一个多线程客户端/服务器应用程序,它带有一个 winsock2 套接字,用于“打电话回家”以获取客户端特有的信息。所有套接
@ThreadSafe public class A { } 这个注解实际上使类线程安全还是只是为了提高可读性? 最佳答案 参见 @ThreadSafe Annotation : Place this
为了在 Rails 中启用多线程,我在 development.rb 中设置了 config.threadsafe!。 我收到一条错误消息: 'method_missing': undefined m
我看到上面的注释在 JCIP 书中被广泛使用。我认为它非常有用,因为即使没有适当的文档,它也说明了一些关于同步策略的内容。我还看到 Intellij Idea使用这些注解它们现在实际上是 Java 语
我必须创建一个Web服务,该服务通过http请求(方法get)来询问黑匣子。 我想使用Apache http客户端,但是在4.3.1版本中,我对过时的对象和方法有一些警告。 所有示例说明使用Threa
我正在将 Eclipse 与 Cloud Tools 插件用于我的 GAE 应用程序 (Java)。我试图让我的 servlet 分派(dispatch)多个请求,因此我添加了标志 true在 app
我想知道使用 Axis2 Web 服务处理并发的正确/最佳方法。 例如,给出以下代码: public class MyServiceDelegate { @Resource UserW
我遇到了一个看起来很常见的问题。但是,通常建议的解决方案在这里似乎不起作用。尝试运行 App Engine 时出现“无法使用 CGI 处理程序启用线程安全”。当然,文档很糟糕。我正在使用 webapp
在《Java Concurrency in Practice》一书中,您可以找到以下代码: @ThreadSafe public class SafePoint { @GuardedBy("t
我最近开始阅读 C# 中的可变对象和不可变对象(immutable对象),无论我在哪里阅读,我发现不变的东西是不可变的,这使得事物在用作哈希表中的键时变得线程安全和有用,但我不明白的是这个概念是在我们
我正在尝试找出要使用的数据类型...基本上我想要一个线程安全的 FIFO 队列,一旦达到预先指定的限制就会自动丢弃足够旧的项目。 好吧,实际上,也许更多的是列表,因为我不想要插入队列并从队列中弹出一个
所以我遇到了很多人都遇到过的错误: appengine-web.xml does not contain a element. 但始终提供的解决方案是添加 true 到 appengine-web.
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
目前,我正在使用以下代码查找普通 POJO 类的 EJB3 无状态 session bean。 (我们在 JEE5 中,所以我们不能在正常的 POJO 类中注入(inject)无状态 session
我是一名优秀的程序员,十分优秀!