我遇到了一个问题,即多个线程正在争夺 RSA javax.crypto.Cipher
,我正在考虑保留一组密码 - 每个线程一个。但是Cipher.getInstance()
给了我同样的例子。我应该研究 aclone()
还是有更好的方法,比如 a new Cipher()
?我们已经考虑过synchronized{}
并且只使用单个实例,Cipher
但它太慢了。感谢您提前提供的所有帮助!
问问题
3843 次
1 回答
6
在我看来,不同的线程得到不同的Cipher
实例——至少在 Mac OSX 下的 JDK 1.6.0_33 下。也许这是因为我正在使用 BouncyCastle 提供程序?
您是尝试getInstance()
从同一个线程调用两次还是从不同的线程调用? clone()
Ciphers 似乎不可用,所以这不是一个选项。
以下代码似乎至少为我吐出了不同的身份哈希码对象:
private static final ThreadLocal<Cipher> localDigest = new ThreadLocal<Cipher>() {
@Override
protected Cipher initialValue() {
try {
return Cipher.getInstance("RSA");
} catch (Exception e) {
// ugly but necessary
throw new RuntimeException(e);
}
}
};
public static void main(String[] args) {
new Thread(new MyRunnable()).start();
new Thread(new MyRunnable()).start();
}
private static class MyRunnable implements Runnable {
@Override
public void run() {
Cipher cipher = localDigest.get();
System.out.println("Got digest " + System.identityHashCode(cipher));
...
}
}
于 2012-08-13T21:32:24.527 回答