BZa*_*per 3 java encryption multithreading
我遇到了多个线程正在争夺RSA的问题javax.crypto.Cipher,我正在考虑保留一个密码集合 - 每个线程一个.但是Cipher.getInstance()给了我同样的例子.我应该调查clone()还是有更好的方法,比如new Cipher()?我们考虑过synchronized{}只使用单个实例,Cipher但速度太慢了.感谢您提前获得所有帮助!
在我看来,不同的线程得到不同的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));
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |