2011-06-07 13 views
23

मान लीजिए कि मैं एक ही मशीन पर एक साथ दो जावा प्रोग्राम चलाता हूं। क्या कार्यक्रम JVM के एक उदाहरण में चलेंगे या क्या वे JVM के दो अलग-अलग उदाहरणों में भाग लेंगे?साथ ही जावा प्रोग्राम को उसी जेवीएम पर चलाएं?

+1

वे डीएलएस, और यहां तक ​​कि संकलित कक्षाएं भी लागू कर सकते हैं (कार्यान्वयन और कॉन्फ़िगरेशन के आधार पर)। –

उत्तर

22

यदि आप प्रत्येक को java कमांड (कमांड लाइन से) के साथ शुरू करते हैं तो वे पूरी तरह अलग JVMs के रूप में चलेंगे।

"प्रोग्राम" को एक जेवीएम के अंदर अलग Threads के रूप में शुरू किया जा सकता है।

+0

यह विक्रेता निर्भर है, लेकिन विंडोज़/लिनक्स/ओएस एक्स के लिए मानक ओरेकल जेवीएम के लिए सच है –

1

यह मंच और जेवीएम कार्यान्वयन पर निर्भर करता है, लेकिन आम तौर पर वे अलग-अलग वीएम में भाग लेते हैं।

1

मान लीजिए कि आप शब्द प्रोग्राम द्वारा प्रक्रियाओं का मतलब है, तो हाँ, दो प्रक्रियाओं को शुरू करने से, दो अलग-अलग JVMs बन जाएंगे।

जावा एप्लिकेशन लॉन्चर का उपयोग करके एक JVM प्रक्रिया शुरू की गई है; यह आपके कार्यक्रम में एक प्रविष्टि बिंदु प्रदान करना चाहिए, जो मुख्य विधि है। आप इस प्रविष्टि-बिंदु से और अन्य कक्षाओं से अन्य कक्षाओं से भी लिंक कर सकते हैं। यह एक ही JVM प्रक्रिया के भीतर तब तक जारी रहेगा, जब तक कि आप कोई अन्य प्रक्रिया शुरू नहीं करते (किसी अन्य प्रोग्राम को चलाने के लिए)।

0

क्या प्रोग्राम JVM के एक उदाहरण में चलेंगे या क्या वे JVM के दो अलग-अलग उदाहरणों में भाग लेंगे?

यह आपके ऊपर है। सरल जेवीएम का उपयोग करना सबसे आसान तरीका है।

0

आप क्या कर सकते हैं दो अलग धागे का उपयोग करें। exampe

new Thread() { 
    public void run() { 
    System.out.println("this is running separately from the main thread!"); 
    } 
}.start(); 

अगर आप चाहते हैं के लिए दो अलग-अलग कार्यक्रमों बातचीत करने के लिए आप सॉकेट

का उपयोग करने की आवश्यकता होगी
13

java बस एक बार में खुला शुरू एक आवेदन है, लेकिन आप एक सरल लांचर उस वर्ग लेता लिख ​​सकता है कर सकते हैं तर्क के रूप में नाम और उन्हें अलग धागे में निष्पादित करता है। एक त्वरित रूपरेखा:

public class Launcher { 
    public static void main(String[] args) throws Exception { 
    for (int i = 0; i<args.length; i++) { 
     final Class clazz = Class.forName(args[i]); 
     new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try{ 
      Method main = clazz.getMethod("main", String[].class); 
      main.invoke(null, new Object[]{}); 
      } catch(Exception e) { 
      // improper exception handling - just to keep it simple 
      } 
     } 
     }).start(); 
    } 
    } 
} 

यह कॉलिंग की तरह

java -cp <classpath for all applications!> Launcher com.example.App1 com.example.App2 

ही वी एम के अंदर और समानांतर में आवेदन APP1 और App2 पर अमल करना चाहिए।

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