Performans kritik bir ortamda MessageDigest'i kullanarak birden çok iş parçacığı için birden çok anahtarı kullanmalıyım. MessageDigest'in nesnesinde durumunu depoladığı için iş parçacığı güvenli olmadığını bilmek için geldim. Vida dişlerinin emniyetli şekilde güvenliğini sağlamak için en iyi yol ne olabilir?İş parçacığı için güvenlidir MessageDigest in Java
Kullanım örneği:
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
//somewhere later, just need to hash a key, nothing else
messageDigest.update(key);
byte[] bytes = messageDigest.digest();
Özellikle:
- Will ThreadLocal çalışması garanti? Performans ceza puanı alacak mı?
- GetInstance tarafından döndürülen nesneler farklı mıdır ve birbirleriyle çakışmazlar mı? Dokümantasyon 'yeni' nesnesinde yazıyor, ancak sadece bir paylaşımcının (paylaşımlı) paylaşılan beton sınıfında olup olmadığından emin değilim?
- Eğer getInstance() 'gerçek' yeni nesneyi döndürürse, hash değerini hesaplamak için her defasında yeni bir örnek oluşturmamız tavsiye edilir mi? Performans cezası açısından - ne kadar maliyetli nedir?
Kullanım durumum çok basit - sadece basit bir anahtar. Senkronizasyonu kullanamıyorum.
sayesinde
I) (İş Ahlakına Dair getInstance görüyorsanız, bunun yeni bir nesne oluşturmak için görünmüyor, daha çok nesne almak için Güvenlik çağırır Nesne [] OBJS = Security.getImpl aşağıda test vakası yazdı : \t MessageDigest messageDigest1 = MessageDigest.getInstance ("SHA-1"); \t MessageDigest messageDigest2 = MessageDigest.getInstance ("SHA-1"); // güncelleştirin ve özetleyin ve her iki messageDigest nesnesinin de farklı olduğunu ve bunların iç nesnelerinin/arabelleklerinin de farklı olduğunu gördü. Yani, ben ThreadLocal çalışmalı. Ve evet, iş parçacığı havuzu olan bir web sunucusudur. ThreadLocal'ı kullanacağım. Teşekkürler, –
@AnilPadia - I ** şiddetle **, ** ThreadLocal kullanılarak ** kullanılmaması önerilir. Bu erken bir optimizasyon. Yeni bir 'MessageDigest' oluşturmak için yaklaşık 2 * micro * -saniye süren bir mikro ölçüt yazdım. Bu, sindirimi kullanan kod tarafından * uzak * olacaktır. – parsifal
ThreadLocal'ı kullanırken gördüğünüz sorunlar nelerdir? Yüzlerce iş parçam olsa bile, yüzlerce nesne olacak. Bu nesnelerin bellek ayak izlerini gerçekten daha az buldum. ThreadLocal benim için iyi çalışıyor. Ayrıca nesneler oluşturmayı test ettim ve 4 mikrosaniye sürdü. Gerçekten neden ThreadLocal –