2012-06-12 16 views
5

मेरी main(String[] args) विधि में मैंने स्विंग थ्रेड पर main1 विधि चलाने के लिए SwingUtilities.invokeAndWait पर कॉल किया है। मैंने हमेशा सोचा कि मुझे थ्रेड सुरक्षा के लिए इसकी आवश्यकता है। मुझे बताया गया है कि यह आवश्यक नहीं है क्योंकि कोई भी जीयूआई कोड करने के लिए पहला धागा GUI थ्रेड बन जाता है। या इसे एक और तरीके से रखने के लिए, आप केवल एक धागे से स्विंग का उपयोग कर सकते हैं, लेकिन इससे कोई फर्क नहीं पड़ता। लेकिन मुझे इसके लिए कोई स्रोत नहीं मिल रहा है और मैं निश्चित होना चाहता हूं।क्या स्विंग थ्रेड पर किसी एप्लिकेशन की मुख्य विधि से स्विच करना आवश्यक है?

+5

सी [स्विंग में संगामिति: प्रारंभिक धागे] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html)। –

+10

स्विंग दस्तावेज बताता है कि यह किया जाना चाहिए। मैं इस पर विश्वास करना चाहता हूं, क्योंकि सलाह को अनदेखा करते समय 99.9% समय काम कर सकता है, इसमें कुछ समय में विफल होने का मौका है, और ब्रह्मांड के नियमों के अनुसार, यह विफलता तभी होगी जब आप अपना प्रोग्राम प्रदर्शित कर रहे हों अपने सबसे बड़े ग्राहक या अपने मालिक को। –

+2

पैडेंट्री का प्वाइंट: यह एक एडब्ल्यूटी थ्रेड है। –

उत्तर

7

आपको जो बताया गया है वह गलत है। main विधि प्रारंभ में मुख्य धागे द्वारा बुलाया जाएगा। सभी जीयूआई संबंधित गतिविधि इवेंट डिस्पैच थ्रेड नामक एक पूरी तरह से अलग धागे पर किया जाना चाहिए। मुख्य धागा ईडीटी नहीं बनता है।

एक अच्छा उदाहरण देखने के लिए कि मैं क्या बारे में बात कर रहा हूँ:

public class ThreadTest { 
    public static void main(String[] args) { 
     final Thread main = Thread.currentThread(); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       Thread edt = Thread.currentThread(); 

       System.out.println(main); 
       System.out.println(edt); 
       System.out.println(main.equals(edt)); 
      } 
     }); 
    } 
}