很简单,可以从多个线程中使用一个实例javax.crypto.Cipher
(例如Cipher.getInstance("RSA")
),还是需要将多个ThreadLocal
实例放在一个线程中?
不,不是。该实例是有状态的。因此,您需要将其存储在threadlocal中,或者在每次加密/解密调用中获取一个新实例,或者将其包装在一个synchronized(cipher)
块中。
Threadsafety通常在Javadoc中提到“
是线程安全的
”或“ 是 不是
线程安全的
”。情况并非如此Cipher
,因此您不应假定它是线程安全的。
问题内容: 在中,此变量被声明为是我的问题,在某些调用之后检查值还是在多线程代码中使用perror()是安全的。这是线程安全变量吗?如果没有,那还有什么选择呢? 我在x86体系结构上将Linux与gcc一起使用。 问题答案: 是的,它是线程安全的。在Linux上,全局errno变量是特定于线程的。POSIX要求errno必须是线程安全的。 参见http://www.unix.org/whitepa
问题内容: 我们在项目中使用了Drools kieSessions。许多线程可以创建新的kieSession。有时在创建会话时线程可能会挂起。因此,问题是: 首先 是kieContainer.newKieSession线程安全操作吗? 上吊的原因可能是肮脏的文字或阅读的kie会话集之类的东西吗? 问题答案: 当我在实践中检查 不是线程安全的操作。
问题内容: 在Java中:线程安全吗,即返回的迭代器是在任何时候反映列表的当前状态,还是仅在创建列表时反映列表的状态? 问题答案: List.iterator()的行为未定义或与其他List实现保持一致。 对于ArrayList,LinkedList,如果在迭代列表时对其进行了修改,则可以获得ConcurrentModificationException。(这不能保证)避免此问题的方法是使用syn
在我的应用程序中,我使用多个线程来处理客户端连接。 我在调试时发现了一个非常奇怪的行为——我有一个SelectionKey,通过调用(使用调试器)它的interestTops()方法,返回值是1(READ),但当我将数据发送到与该键对应的套接字时,选择器不会被唤醒。。 如果使用调试器,我将特定选择键更改为1(即使是1),选择器会突然对该更改做出反应。 在给定的时间内,我只有一个线程处理一个连接,但
问题内容: 如果我有两个多个线程访问HashMap,但要保证它们永远不会同时访问同一密钥,那是否还会导致争用情况? 问题答案: 在@dotsid的回答中,他说: 如果你以任何方式更改HashMap,则代码将被破坏。 他是正确的。即使线程使用的是不相交的键集,在没有同步的情况下更新的HashMap也会中断。这是一些可能出错的事情。 如果一个线程执行put,则另一线程可能会看到哈希图大小的陈旧值。 当
问题内容: 我试图用一个例子来说明它的使用和重要性,如果省略的话,它实际上不会给出很好的结果。 但我并不习惯使用。下面的代码的想法是,如果省略则导致无限循环,如果存在则是完全线程安全的。以下代码是线程安全的吗?您是否还有其他使用的现实且简短的代码示例,如果没有该示例,将会给出明显不正确的结果? 这是代码: 问题答案: Victor是对的,您的代码存在问题:原子性和可见性。 这是我的版本: 如果线程