কম্পিউটার

জাভাতে কি সুইং থ্রেড-নিরাপদ?


না, জাভা সুইং উপাদানগুলি জাভাতে থ্রেড-নিরাপদ নয়।

কেন সুইং উপাদানগুলি থ্রেড-নিরাপদ নয়

  • জাভা সুইং থ্রেড-নিরাপদ না হওয়ার একটি প্রধান কারণ হল এর উপাদানগুলিকে প্রসারিত করার কাজকে সহজ করা৷
  • জাভা সুইংয়ের আরেকটি কারণ হল ওভারহেড লকগুলি প্রাপ্ত করা এবং ছেড়ে দেওয়া এবং অবস্থা পুনরুদ্ধার করার সাথে জড়িত থাকার কারণে থ্রেড-নিরাপদ নয়। .
  • জাভা সুইং কম্পোনেন্টের কিছু পদ্ধতি মাল্টি-থ্রেডেড অ্যাক্সেস সমর্থন করবে যেমন রিপেইন্ট(), রিভালিডেট() , এবং অবৈধ() পদ্ধতি এর JComponent ক্লাস।

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

জাভা সুইং উপাদানগুলি শুধুমাত্র ইভেন্ট ডিসপ্যাচ থ্রেড (EDT থেকে অ্যাক্সেস করা যেতে পারে) ) অনস্ক্রিন পেইন্টিং জন্য একটি উপাদান উপলব্ধ একবার. EDT থ্রেড থ্রেড হল কলব্যাক পদ্ধতি যেমন paint() এবং আপডেট() ইভেন্ট লিসেনার i-এ সংজ্ঞায়িত ইভেন্ট হ্যান্ডলার পদ্ধতিগুলি ছাড়াও ইন্টারফেস যেকোন থ্রেড থেকে শুধুমাত্র থ্রেড-নিরাপদ পদ্ধতিগুলি নিরাপদে আহ্বান করা যেতে পারে। যেহেতু সুইং অবজেক্টের বেশিরভাগ পদ্ধতি থ্রেড-নিরাপদ নয়, সেগুলিকে একটি একক থ্রেড থেকে আহ্বান করা যেতে পারে, 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 তৈরির কাজকে বিলম্বিত করবে তারপর নিশ্চিত করুন যে GUI তৈরি করা EDT-এর মধ্যে ঘটে।

আউটপুট

জাভাতে কি সুইং থ্রেড-নিরাপদ?


  1. জাভাতে জাভা সুইং এর আর্কিটেকচার ব্যাখ্যা কর?

  2. কেন AWT উপাদানগুলি ভারী-ওজন এবং সুইং উপাদানগুলি জাভাতে হালকা ওজনের?

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

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