কম্পিউটার টিউটোরিয়াল

জাভাতে Swing থ্রেড-সেফ কি?


না, জাভা সুইং কম্পোনেন্টগুলো জাভাতে থ্রেড-সেফ নয়।

কেন সুইং কম্পোনেন্ট থ্রেড-সেফ নয়

  • জাভা সুইং থ্রেড-সেফ নয় হওয়ার প্রধান কারণ এর কম্পোনেন্ট এক্সটেন্ড করার কাজ সহজ রাখা।
  • আরেকটি কারণ হল লক পাওয়া এবং রিলিজ করা এবং স্টেট রিস্টোর করার ওভারহেড।
  • JComponent ক্লাসের কিছু মেথড যেমন repaint(), revalidate(), এবং invalidate() মাল্টি-থ্রেডেড এক্সেস সাপোর্ট করে।

ইভেন্ট ডিসপ্যাচ থ্রেড (EDT)

একবার কোনো কম্পোনেন্ট স্ক্রিনে পেইন্টের জন্য উপলব্ধ হলে জাভা সুইং কম্পোনেন্টগুলো শুধুমাত্র ইভেন্ট ডিসপ্যাচ থ্রেড (EDT) থেকে অ্যাক্সেস করা যাবে। EDT থ্রেড হল সেই থ্রেড যা paint() এবং update() মেথডের পাশাপাশি ইভেন্ট লিসনার ইন্টারফেস-এ সংজ্ঞায়িত ইভেন্ট হ্যান্ডলার মেথড আহ্বান করে। শুধুমাত্র থ্রেড-সেফ মেথডগুলো যেকোনো থ্রেড থেকে নিরাপদে আহ্বান করা যায়। যেহেতু অধিকাংশ সুইং অবজেক্ট মেথড থ্রেড-সেফ নয়, সেগুলো একটি একক থ্রেড থেকে আহ্বান করা যায়, সেটি হল EDT।

উদাহরণ

import javax.swing.*; 
import java.awt.Dimension; 
import java.awt.event.*; 
public class EDTTest extends JPanel implements ActionListener { 
    private static EDTTest myPanel; 
    private static JFrame myFrame; 
    public EDTTest() { 
        super(); 
    } 
    public Dimension getPreferredSize() { 
        return new Dimension(500,425); 
    } 
    public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable() { 
            public void run() { 
                createAndShowGUI(); 
            } 
        }); 
    } 
    private static void createAndShowGUI() { 
        myFrame = new JFrame("EDT Program"); 
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        myFrame.setLocationRelativeTo(null); 
        myPanel = new EDTTest(); 
        myFrame.add(myPanel); 
        initMenu(); 
        myFrame.setVisible(true); 
    } 
    private static void initMenu() { 
        JMenuBar menuBar = new JMenuBar(); 
        myFrame.setJMenuBar(menuBar); 
        JMenu file = new JMenu("File"); 
        JMenuItem quit = new JMenuItem("Quit"); 
        quit.addActionListener(myPanel); 
        file.add(quit); 
        menuBar.add(file); 
    } 
    public void actionPerformed(ActionEvent ae) { 
        String choice = ae.getActionCommand(); 
        if (choice.equals("Quit")) { 
            System.exit(0); 
        } 
    } 
}

উপরের উদাহরণে, SwingUtilities.invokeLater() মেথডটি GUI তৈরির কাজকে বিলম্বিত করে INITIAL থ্রেডের টাস্কগুলো সম্পূর্ণ হওয়া পর্যন্ত, তারপর নিশ্চিত করে যে GUI তৈরি EDT-র ভিতরে হচ্ছে।

আউটপুট

জাভাতে Swing থ্রেড-সেফ কি?

  1. জাভা স্বিং-এর আর্কিটেকচার ব্যাখ্যা করুন।

  2. জাভাতে AWT কম্পোনেন্ট কেন heavy-weight এবং Swing কম্পোনেন্ট কেন light-weight?

  3. জাভাতে নেস্টেড ইন্টারফেস

  4. জাভাতে ইন্টারফেস