मैं निम्नलिखित कोड है कि जावा स्ट्रीम एपीआई के माध्यम से जा रहा द्वारा एक समानांतर फैशन में एक सूची से एक मानचित्र को भरने के लिए प्रयास करता है:मुझे कैसे पता चलेगा कि जावा स्ट्रीम संग्रह (collect.toMap) समानांतर है या नहीं?
class NameId {...}
public class TestStream
{
static public void main(String[] args)
{
List<NameId > niList = new ArrayList<>();
niList.add(new NameId ("Alice", "123456"));
niList.add(new NameId ("Bob", "223456"));
niList.add(new NameId ("Carl", "323456"));
Stream<NameId> niStream = niList.parallelStream();
Map<String, String> niMap = niStream.collect(Collectors.toMap(NameId::getName, NameId::getId));
}
}
मैं कैसे करूँ पता है कि नक्शे में एक से अधिक थ्रेड यानी उपयोग करते हुए, से भर जाता है समानांतर? क्या मुझे collect.toMap के बजाय collect.toConcurrentMap को कॉल करने की आवश्यकता है? क्या यह मानचित्र की आबादी को समानांतर करने का एक उचित तरीका है? मुझे कैसे पता चलेगा कि ठोस नक्शा नया niMap का समर्थन कर रहा है (उदाहरण के लिए हैश मैप)?
n कोर की संख्या आपके प्रोसेसर जा रहा है:
ध्यान दें कि मेरी StreamEx पुस्तकालय जो मानक स्ट्रीम एपीआई को बढ़ाता है एक
toMap()
विधि है जो समानांतर धारा और अनुक्रमिक एक के लिए गैर समवर्ती संग्रह के लिए समवर्ती संग्रह का उपयोग करता है कहते हैं , आपकी समांतर धारा पर काम करने के लिए एन -1 धागा बनाया जाएगा। आपकी सूची में 3 पंक्तियां हैं, इसलिए आप अधिकतर प्रदर्शन को कम कर देंगे। –स्ट्रीम फ्रेमवर्क जानबूझकर आपके द्वारा कार्यान्वयन (समानांतर या नहीं) को छुपाता है। अगर सब ठीक से किया जाता है, तो बताने का कोई तरीका नहीं होगा। –