Şu anda bir üretici/tüketici iş parçacığı oluşturmaya çalışıyorum, üretici iş parçacığı, olası tüm harf kombinasyonlarından geçiyor ve kendi MD5 karmalarını yaratıyor. Daha sonra her bir kombinasyon ve onun karması HashMap<String,String>
'a konur. Şimdi benim tüketici iş parçacığımda,vb. Queue
gibi değerlerini kaldırarak, poll()
numaralı telefonu arayarak, hem karma kombinasyonu hem de karma özelliğini görebilme yeteneğimi kullanmam için Queue<>
koleksiyonunu hashmap'da kullanmak istiyorum. Bunu yapmak için nasıl giderim? HashMap
var, ama nasıl 'yapmak' ya da bir kuyruk olarak çevirmek bilmiyorum. Teşekkürler. Bu anahtar/değer çiftleri depolar, ancak aynı zamanda sokulmuştur sırayı hatırlar -HashMap seti için bir Kuyruk oluşturulabilir mi?
cevap
Kodunuzun iş parçacığı güvenliğini kullanmadan bir HashMap kullanmamalısınız. Else, bir Live-lock ile bitebilirsiniz.
Haritanızı tuşların girildiği sırayla yineleyebilmek için LinkedHashMap kullanabilirsiniz.
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
bu (özel bir şey) gibi girdileri itecek yapımcı:
while (someCondition) {
Map.Entry nextEntry = null;
// This block is equivalent to polling
{
synchronized(s) {
Iterator i = s.iterator(); // Must be in the synchronized block
if (i.hasNext()) {
nextEntry = i.next();
i.remove();
}
}
}
if (nextEntry != null) {
// Process the entry
...
} else {
// Sleep for some time
...
}
// process
}
LinkedHashMap
tip HashMap
ve Queue
bir kombinasyonu gibi. Bu tam olarak aradığınız türde olabilir. Açık poll()
işlevi yoktur, ancak LinkedHashMap
üzerinden bir yineleyici alırsanız, öğeleri eklendikleri sırayla ziyaret edersiniz. İlk eleman size geri verecektir
public <KeyType, ValueType> KeyType first(LinkedHashMap<KeyType, ValueType> map) {
assert !map.isEmpty();
return map.iterator().next();
}
: Muhtemelen sonra böyle bir fonksiyon yazabiliriz. Sadece uygun şekilde senkronize ettiğinizden emin olun.
Alternatif olarak, sadece bir yardımcı sınıf Pair
tanımlayan ve daha sonra kuyrukta Pair
s depolayarak bir Queue
içinde anahtar/değer çiftleri depolamak düşünebiliriz.
Bu yardımcı olur umarız!
Güzel, bu yüzden bazı SyncObject gerek sadece olacaktır:
m.put(key, object)
tüketici böyle girdileri anket ediyorum Tüketici tarafında LinkedHashMap'ten okumak mümkün olduğunda sinyal. –
Merhaba, LinkedHashMap iş parçacığı güvenli değil ve Queue tipinde değil. – sperumal
@ sperumal - Bunlardan hiçbirinin böyle olmadığına asla karar vermedim. OP'nin senkronizasyon kodunu sağlayacağını varsaydım. Ayrıca, 'Queue 'türünde olması gereken herhangi bir gereklilik olduğuna inanmıyorum; OP'nin sorusu bundan hiç bahsetmez. Bu bir gereklilikse, bu yaklaşım kesinlikle işe yaramayacaktır. – templatetypedef
Sana EntrySet bir Kuyruk yaratmak önermek -
Queue<EntrySet<String,String>> queue = new SynchronousQueue<EntrySet<String,String>>();
for (EntrySet<String,String> entry:map.entrySet()) {
queue.add(entry);
}
Sen boş olmayan bu tür LinkedBlockingQueue olarak söz konusu unsurları ve sadece prdocuer bekler koymak sağlayan kuyruğun başka tür kullanarak düşünebilirsiniz.
Üretici, daha sonra gerekirse bir EntrySet nesnelerini temel alan bir haritayı yeniden oluşturabilecektir.
Hmm Bu iyi bir yöntem gibi görünüyor. Teşekkürler, deneyeceğim. Bir soru bu iş parçacığı güvenli mi? –
- 1. Normal haritalar dokudan oluşturulabilir mi?
- 2. Bir ürün için benzersiz (tek ürünlü) bir sayfa oluşturulabilir mi?
- 3. Genel türleri ele alan bir API için dokümanlar oluşturulabilir mi?
- 4. Qt: Alt nesneler ana nesnesinde oluşturulabilir mi?
- 5. İş parçacıkları, statik başlatma sırasında güvenli bir şekilde oluşturulabilir mi?
- 6. Tabloda yinelenen değerler varsa, MySQL'de benzersiz bir dizin oluşturulabilir mi?
- 7. HashMap
- 8. HashMap için SonucuSet
- 9. HashMap
- 10. Herhangi bir kullanıcı etkileşimi olmadan seçim nesnesi oluşturulabilir mi?
- 11. Bu Prolog'da kuyruk özlemi yapılabilir mi?
- 12. Programcılar için kuyruk teorisi?
- 13. Dize anahtarlı HashMap pas içinde mi?
- 14. Seti sınırı array_agg için()
- 15. Java 8 Akış Toplama Seti
- 16. seti
- 17. Haskell'de etkin bir kuyruk
- 18. sıralamak için nasıl HashMap tuşları
- 19. Joker Uygulamasının Enterprise/In house Provisioning Profili oluşturulabilir mi?
- 20. Mevcut bir raylar uygulaması için bir sürüm API nasıl oluşturulabilir?
- 21. Android'in kaynak kodu El Capitan'da XCode 7.2 ile oluşturulabilir mi?
- 22. Zaman içinde birden fazla RFCOMM kanalı oluşturulabilir mi?
- 23. Sprite Seti SKShapeNode, bir
- 24. lxml kullanırken, XML isim-alanı nitelikleri olmadan oluşturulabilir mi?
- 25. Kaynak oluşturulabilir Çizim
- 26. iframe'de jQuery UI oluşturulabilir
- 27. QtCreator seti ayarlarında Qt5reator seti ayarlarında Qt5
- 28. HashMap: includesKey() Ne zaman olması gerektiği doğru değil mi?
- 29. Android'de HashMap nasıl depolanır?
- 30. Clojure'da Kuyruk Çağrısı Eliminasyonu?
Teşekkürler, bu bir çekicilik çalıştı ve uygulamak için hızlı, kolay ve net oldu –