2010-10-19 9 views
7

यहाँ परिदृश्य है:क्या एक ही समय में फ़ाइल में पढ़ना और लिखना संभव है?

  • ThreadA कुछ सॉकेट से डेटा पढ़ा है, और लिखने के लिए जा रहा है "MyFile.txt" करने के लिए
  • ThreadB "MyFile" पढ़ने के लिए जा रहा है, और जब यह अंत तक पहुँच जाता है, यह माईफाइल में नए डेटा उपलब्ध होने तक लूप होगा (क्योंकि मैं "MyFile.txt" को फिर से खोलना नहीं चाहता हूं, और समय खो देता हूं इसलिए मैं उस स्थान पर पहुंच गया जहां से मैं था ..)।

क्या ऐसा कुछ करना संभव है?

यदि नहीं, तो ऐसी कोई काम करने का कोई और तरीका है?

+0

संभव डुप्लिकेट [मैं कैसे जावा का उपयोग करते हैं एक फ़ाइल है कि सक्रिय रूप से लिखा जा रहा से पढ़ने के लिए?] (Http://stackoverflow.com/questions/4149/ कैसे-करें-मैं-उपयोग-जावा-टू-रीड-टू-ए-फाइल-वह-सक्रिय रूप से लिखा जा रहा है) –

+0

मैंने एक प्रश्न का एक लिंक जोड़ा है जो इस का एक डुप्लिकेट है। लेकिन गुजरने में, क्या आपने RandomAccessFile देखा है? किसी विशेष स्थिति से पढ़ने के लिए आपको एक पूरी फ़ाइल को फिर से जाने की आवश्यकता नहीं है –

उत्तर

13
समस्या आप का उल्लेख

एक प्रसिद्ध Producer Consumer Problem

यह करने के लिए आम समाधान BlockingQueue

उपयोग करने के लिए वास्तविक दुनिया के उपयोग का एक उदाहरण AjaxYahooSearchEngineMonitor

क्या थ्रेड एक है है में है, यह प्रस्तुत करेगा है कतार के लिए एक स्ट्रिंग, और फिर तुरंत लौटें।

क्या थ्रेड बी करता है, यह आइटम को एक-एक करके कतार से उठाएगा, और उन्हें संसाधित करेगा। जब कतार में कोई आइटम नहीं है, तो थ्रेड बी बस वहां प्रतीक्षा करेगा। स्रोत कोड के लाइन 83 देखें।

+0

बहुत बहुत धन्यवाद !! यह वही है जो मैं चाहता था। यह डेटाबेस या फ़ाइल से पढ़ने/लिखने से बेहतर है। – mohamida

2

मुझे लगता है कि यह जावा NIO पुस्तकालयों का उपयोग कर संभव है

की
+1

मुझे नहीं लगता कि यह सुरेश है, लेकिन अगर आप यह दिखाते हैं कि यह कैसे करना है तो मुझे सही होने में खुशी होगी। –

+0

@ प्रत्येक थ्रेड के लिए चयनकर्ताओं का उपयोग करके निक और उन पर सिंक्रनाइज़ करना संभव है। –

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