首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cipher线程安全吗?

Cipher线程安全吗?
EN

Stack Overflow用户
提问于 2011-08-05 21:52:30
回答 4查看 25K关注 0票数 61

很简单,一个javax.crypto.Cipher实例(例如Cipher.getInstance("RSA"))是否可以从多个线程使用,或者我是否需要将多个线程放在一个ThreadLocal中(在我的例子中)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-05 21:59:00

不,不是。实例是有状态的。因此,您需要将其存储在线程本地,或者在每次加密/解密调用时获取一个新实例,或者将其包装在synchronized(cipher)块中。

在javadoc中,线程安全通常被称为"is thread safe“或"is thread safe”。Cipher并非如此,因此您不应该假设它是线程安全的。

票数 105
EN

Stack Overflow用户

发布于 2011-08-05 22:06:41

即使Cipher是线程安全的,从多个线程同时使用它也没有什么用处。

您输入和输出的字节(通过它的updatefinish方法)是一个连续的流。这意味着,在另一端,它们必须以相同的顺序传递才有意义。如果只有一个线程这样做,这是最容易实现的。

如果你使用多线程,你通常会想要在两次调用之间调用reset --而且无论如何你都需要外部同步。

票数 9
EN

Stack Overflow用户

发布于 2011-08-05 22:01:33

我不会在没有同步的情况下使用来自多个线程的Cipher对象。当您查看API时,有一些方法只能通过更改内部状态才能工作,例如init()update()。这使得它们隐式地不是线程安全的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6957406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档