2016-03-31 11 views
8

नए जावा 8 को देखते हुए हमें असीमित कार्यों के लिए वास्तव में अच्छी सुविधाएं मिल रही हैं, उदा। CompletableFuture और .paralellStream()। यदि आप इसे जावा एसई में चलाते हैं, क्योंकि मैंने इसे समझा है तो आप फोर्कजोइनपूल का उपयोग करेंगे, लेकिन अगर मैं निम्नलिखित उदाहरणों को चलाता हूं तो क्या होता है। वाइल्डफ्लाई या टॉमकैटई?जावाटेबल ऐप सर्वर में CompletableFuture/समानांतर स्ट्रीम

//Here I start a comp.Future without giving an Executor 
test = CompletableFuture.supplyAsync(() -> timeConsumingMethod()); 
//Here I start a parallel stream 
mList.paralell().filter(...).collect(Collectors.toList()) 

क्या होता है और जहां मैं से अगर

  1. उदाहरण एक @Stateful सेम
  2. उदाहरण एक @Stateless सेम में भाग रहे हैं में भाग रहे हैं मेरी संसाधन उधार होगा
  3. उदाहरण एक सीडीआई बीन
+0

आखिरी मैंने सुना (और यह थोड़ी देर हो गया है) यहां है: http://coopsoft.com/ar/Calamity2Article.html#EE – edharned

उत्तर

8

आपको जावा ईई में फोर्कजोइनपूल का उपयोग नहीं करना चाहिए। केवल ऐप सर्वर समानांतरता के लिए संरचनाएं प्रदान करता है (जैसे कि जावा ईई 7 में ManagedExecutorService), क्योंकि threads have to be managed by the container

उत्सुकता से, this answer में उल्लिखित मेलिंग सूची में एक संदेश है जो दावा करता है कि फोर्कजोइनपूल ईई कंटेनर में सिंगल-थ्रेडेड में गहराई से गिरावट करेगा। मैंने इसका परीक्षण ग्लासफ़िश 4.1 के साथ किया है और सामान्य धागे बनाए जाते हैं।

@Singleton 
public class SomeSingleton { 
    public void fireStream() { 
     IntStream.range(0, 32) 
      .parallel() 
      .mapToObj(i -> String.format("Task %d on thread %s", 
       i, Thread.currentThread().getName())) 
      .forEach(System.out::println); 
    } 
} 

मैं निम्नलिखित उत्पादन प्राप्त:

Info: Task 20 on thread http-listener-1(4) 
Info: Task 10 on thread ForkJoinPool.commonPool-worker-3 
Info: Task 21 on thread http-listener-1(4) 
Info: Task 11 on thread ForkJoinPool.commonPool-worker-3 
Info: Task 22 on thread http-listener-1(4) 
Info: Task 8 on thread ForkJoinPool.commonPool-worker-3 
Info: Task 23 on thread http-listener-1(4) 
Info: Task 9 on thread ForkJoinPool.commonPool-worker-3 
Info: Task 18 on thread http-listener-1(4) 
Info: Task 14 on thread ForkJoinPool.commonPool-worker-3 
Info: Task 19 on thread http-listener-1(4) 
Info: Task 15 on thread ForkJoinPool.commonPool-worker-3 
Info: Task 16 on thread http-listener-1(4) 
Info: Task 17 on thread http-listener-1(4) 
Info: Task 4 on thread http-listener-1(4) 
Info: Task 5 on thread http-listener-1(4) 
Info: Task 6 on thread http-listener-1(4) 
Info: Task 7 on thread http-listener-1(4) 
Info: Task 2 on thread http-listener-1(4) 
Info: Task 3 on thread http-listener-1(4) 
Info: Task 0 on thread http-listener-1(4) 
Info: Task 1 on thread http-listener-1(4) 
Info: Task 26 on thread http-listener-1(4) 
Info: Task 27 on thread http-listener-1(4) 
Info: Task 24 on thread http-listener-1(4) 
Info: Task 25 on thread http-listener-1(4) 
Info: Task 12 on thread http-listener-1(4) 
Info: Task 13 on thread http-listener-1(4) 
Info: Task 30 on thread http-listener-1(4) 
Info: Task 31 on thread http-listener-1(4) 
Info: Task 28 on thread ForkJoinPool.commonPool-worker-0 
Info: Task 29 on thread ForkJoinPool.commonPool-worker-0 

शायद गिरावट जावा ईई 8, जब अधिकांश व्यक्ति विनिर्देशों एसई 8 सुविधाओं का लाभ उठाने जाएगा पर ही उपलब्ध होगा इस कोड चल रहा है।


संपादित

मैं glassfish 4.1.1 स्रोत कोड देख लिया है, और वहाँ ForkJoinPool, ForkJoinWorkerThreadFactory या ForkJoinWorkerThread का एक बार उपयोग नहीं है। तो ऐप सर्वर समानांतर संसाधन प्रबंधित करता है उन संरचनाओं में से किसी एक पर आधारित नहीं है। दुर्भाग्य से, वास्तव में कोई गिरावट तंत्र उपलब्ध नहीं है।

+0

हां मैंने पढ़ा है कि "डाउनग्रेड" भी है लेकिन यह दो साल का है और जब भी मैं उदाहरण चलाता हूं मैं सामान्य रूप से समांतरता को देखता हूं :) मेरा कामकाजी सिद्धांत यह है कि यह एक प्रबंधित सर्वर थ्रेड पूल प्राप्त करने के लिए प्रबंधित एक्स्सेलर सेवा का उपयोग करेगा। आप किस मेलिंग सूची का जिक्र कर रहे हैं? – stevietheTV

+1

[यह एक] (http://mail.openjdk.java.net/pipermail/lambda-dev/2013-April/009335.html)। जेसीपी में चीजें धीरे-धीरे बढ़ती हैं, धीमी गति से अगर यह जावा ईई संबंधित है। मुझे आश्चर्य नहीं होगा अगर यह उसी स्थिति में था जब यह निकला, विशेष रूप से क्योंकि यह एसई 8 से पहले हुआ था, जिसका मतलब है कि यह शायद कल्पना का हिस्सा नहीं है। मेरा मानना ​​है कि अगर यह काम करता है, तो कहें, ग्लासफ़िश, पोर्टेबिलिटी की कोई गारंटी नहीं होगी। हालांकि, मैं कुछ और निश्चित खोजने की कोशिश करूंगा। – andrepnh

+1

जेडीके 8 जारी होने पर गिरावट का उल्लेख किया गया था, हालांकि, जावा ईई 7 विनिर्देश जेडीके 7 पर आधारित है और किसी भी विशेष तरीके से किसी भी जेडीके 8 विशिष्ट कार्यक्षमता का इलाज नहीं करता है। उम्मीद है कि ईई 8 में गिरावट मानकीकृत हो जाएगी, लेकिन अब तक मैंने इसके बारे में कुछ भी नहीं देखा है। – OndrejM

संबंधित मुद्दे