2
我寫了自己的簡體MessageDigest
包裝,現在我想知道它是否線程安全。此MessageDigest封裝線程安全嗎?
public final class SimpleIMD implements ImmutableMessageDigest {
private final MessageDigest md;
public SimpleIMD(MessageDigest md) {
this.md = this.cloneMessageDigest(md);
}
private MessageDigest cloneMessageDigest(MessageDigest original) {
MessageDigest clone = null;
try {
clone = (MessageDigest) original.clone();
} catch (CloneNotSupportedException cnse) {
throw new RuntimeException(
"Failed to instantiate a new SimpleImd instance.",
cnse
);
} finally {
return clone;
}
}
@Override
public byte[] digest() {
return this.md.digest();
}
@Override
public ImmutableMessageDigest update(byte[] arr, int offset, int len) {
MessageDigest newMsgDigest = this.cloneMessageDigest(this.md);
newMsgDigest.update(arr, offset, len);
return new SimpleIMD(newMsgDigest);
}
}
類似乎_immutable_,因此線程安全的。但是,這並不意味着該類的代碼是線程安全的。 –
好吧,如果'MessageDigest.digest'不是線程安全的,那麼代碼也不是。在Javadoc中沒有提到線程安全性,所以最安全的假設是你的代碼被破壞了。這只是一個假設,但是,必須檢查 – Dici
@MickMnemonic我認爲我需要對新鮮副本進行摘要以保證安全。但是,如果克隆時發生了一些奇怪的事情呢?這不是真正的原子,我擔心我需要一個鎖的地方。 –