2012-05-16 12 views
10

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

  • सिंक्रनाइज़ तरीकों/ब्लॉक
  • किसी भी ताला को लागू करने वाली java.util.concurrent.locks

क्योंकि ऐसा लगता है मेरे लिए वे सभी धागे स्तर हैं?

क्या जावा प्रक्रियाओं के बीच सेमफोरस जैसे आईपीसी के लिए समर्थन प्रदान करता है?

उत्तर

10

यह सही है। आप किसी मानक सिंक्रनाइज़ेशन तंत्र का उपयोग नहीं कर सकते क्योंकि वे एक JVM में काम कर रहे हैं।

समाधान

  1. आप फ़ाइल ताले जावा 7.
  2. आप डेटाबेस संस्थाओं के माध्यम से तुल्यकालन का उपयोग कर सकते में पेश कर सकते हैं।
  3. टेराकोटा जैसे पहले से लागू समाधानों में से एक उपयोगी हो सकता है
  4. अपने डिज़ाइन को फिर से सोचें। यदि आप जावा दुनिया में शुरुआती हैं तो अधिक अनुभवी इंजीनियरों के साथ विवरण में बात करने का प्रयास करें। आपका प्रश्न दिखाता है कि आईएमएचओ आप गलत तरीके से हैं।
+0

धन्यवाद सिंक्रनाइज़ करने के लिए ले है! हम एक अलग परियोजना से उसी वास्तुकला का फिर से उपयोग कर रहे हैं, इसलिए कुछ डिज़ाइन हमारी दुनिया में समझ में नहीं आ सकते हैं। इनपुट के लिए बहुत धन्यवाद, यह बहुत उपयोगी है। – tytchong

+1

5. आप जावा 1.4 में पेश की गई फाइल लॉक का उपयोग कर सकते हैं। – EJP

0

वे सभी थ्रेड-स्तर हैं?

यह सही है, synchronized आदि केवल एक ही प्रक्रिया के संदर्भ में काम करते हैं।

क्या जावा प्रक्रियाओं के बीच सेमफोरस जैसे आईपीसी के लिए समर्थन प्रदान करता है?

जावा प्रक्रियाओं के बीच संचार को लागू करने का एक तरीका RMI का उपयोग कर रहा है।

+0

धन्यवाद मैं आरएमआई में देखूंगा। – tytchong

7

आप synchronized कीवर्ड, ताले, परमाणु वस्तुओं आदि का उपयोग कर सकते हैं - लेकिन वे JVM के लिए स्थानीय हैं। तो यदि आपके पास एक ही प्रोग्राम चलाने वाले दो JVM हैं, तो वे अभी भी उदा। एक ही समय में उसी synchronized विधि को चलाएं - प्रत्येक JVM पर एक, लेकिन अधिक नहीं।

समाधान:

  • आप फ़ाइल प्रणाली या डेटाबेस पर मैनुअल तुल्यकालन का उपयोग कर सकते

+0

आपकी टिप्पणियों के लिए बहुत बढ़िया धन्यवाद। – tytchong

0

रूप में अच्छी तरह

  • ताला लगा वितरित प्रदान करता है मैं हा फ़ाइलों का उपयोग कर एक जावा आईपीसी लॉक कार्यान्वयन लागू किया है: FileBasedLock और एक साझा डीबी (जेडीबीसी) का उपयोग कर एक आईपीसी सेमफोर कार्यान्वयन: JdbcSemaphore।दोनों कार्यान्वयन spf4j का हिस्सा हैं।

    आप एक चिड़ियाघर संचालक उदाहरण Apache Curator

  • 0

    से Zookeeper आधारित लॉक व्यंजनों पर एक नज़र मैं distributed lockRedisson द्वारा प्रदान की उपयोग कर रहा हूँ अलग JVMs का काम

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