java.security.cert.Certificate中的验证方法是否线程安全?
一般来说,中的验证方法可以被认为是线程安全的吗?具体而言,以及。多个线程可以同时调用这些方法而不用担心它们会以线程不安全的方式修改内部数据吗 JavaDoc没有提到这方面的任何内容。也许这是特定于实现的 我想这样做:java.security.cert.Certificate中的验证方法是否线程安全?,java,security,thread-safety,Java,Security,Thread Safety,一般来说,中的验证方法可以被认为是线程安全的吗?具体而言,以及。多个线程可以同时调用这些方法而不用担心它们会以线程不安全的方式修改内部数据吗 JavaDoc没有提到这方面的任何内容。也许这是特定于实现的 我想这样做: Certificate certificate = getCertificateFromCache(); certificate.verify(whatever); 理想情况下,无需将其放入同步块。证书。验证是否为抽象方法。因此,从这个角度来看,不能保证所有的实现都是线程安全的。
Certificate certificate = getCertificateFromCache();
certificate.verify(whatever);
理想情况下,无需将其放入同步块。
证书。验证是否为抽象方法。因此,从这个角度来看,不能保证所有的实现都是线程安全的。可能实际证书实现的文档会告诉您一些关于它的信息,但是为了安全起见,您可能必须同步调用以验证实际证书
也许您可以创建一个类似于平等证书实例池的东西来绕过这个问题。然后您可以在同一证书的不同实例上并行验证。看看,它有一些同步的方法(包括验证)和私有ConcurrentHashMap指纹
字段
因此,在我看来,有一个明确的意图,使它线程安全
不幸的是,synchronized
方法更新内部状态字段,如verificationResult
,verifiedPublicKey
,verifiedProvider
,在从多个线程并发访问期间会产生一些性能开销
例如,通过在ThreadLocal
中缓存实例,可以更有效地避免synchronized
锁争用。您真正关心的是什么verify
不应更改证书,因此在同一证书上同时调用相同的方法不会导致问题!?这正是我要问的:这些方法是线程安全的吗?有没有保证调用不会以线程不安全的方式修改内部数据?这就是我担心的。看不出它不是线程安全的任何原因,但如果不知道它是如何实现的,就不可能确定。