Event dispatching thread
ইভেন্ট ডিসপ্যাচিং থ্রেড (ইডিটি) একটি ব্যাকগ্রাউন্ড থ্রেড যা জাভাতে অ্যাবস্ট্রাক্ট উইন্ডো টুলকিট (এডাব্লুটি) গ্রাফিকাল ইউজার ইন্টারফেস ইভেন্ট সারি থেকে ইভেন্টগুলি প্রক্রিয়া করতে ব্যবহৃত হয়। এটি ইভেন্ট-চালিত প্রোগ্রামিংয়ের সাধারণ ধারণার একটি উদাহরণ, যা জাভা ছাড়া অন্যান্য অনেক প্রসঙ্গে জনপ্রিয়, উদাহরণস্বরূপ, ওয়েব ব্রাউজার বা ওয়েব সার্ভার। ইভেন্টগুলি প্রাথমিকভাবে আপডেট ইভেন্ট যা ইউজার ইন্টারফেস উপাদানগুলিকে নিজেদের পুনরায় আঁকতে বাধ্য করে, বা মাউস বা কীবোর্ডের মতো ইনপুট ডিভাইসগুলি থেকে ইনপুট ইভেন্টগুলি। এ. ডব্লিউ. টি একটি একক-থ্রেডেড পেইন্টিং মডেল ব্যবহার করে যেখানে সমস্ত স্ক্রিন আপডেট একটি একক থ্রেড থেকে সম্পাদন করা আবশ্যক। দৃশ্যমান ইউজার ইন্টারফেস উপাদানগুলির ভিজ্যুয়াল অবস্থা আপডেট করার জন্য ইভেন্ট প্রেরণ থ্রেডটি একমাত্র বৈধ থ্রেড। অন্যান্য থ্রেড থেকে দৃশ্যমান উপাদানগুলি আপডেট করা জাভা প্রোগ্রামগুলিতে অনেক সাধারণ বাগের উৎস যা সুইং ব্যবহার করে। ইভেন্ট পাঠানোর থ্রেডকে অ্যাডোব ফ্ল্যাশের প্রাইমোর্ডিয়াল ওয়ার্কার এবং এসডাব্লুটি,. নেট ফ্রেমওয়ার্ক এবং অ্যান্ড্রয়েডের ইউআই থ্রেড বলা হয়। একটি সফ্টওয়্যার অ্যাপ্লিকেশন সাধারণত একাধিক থ্রেড এবং একটি একক জি. আই. টি তথ্য কাঠামো নিয়ে গঠিত। এর অর্থ হল জিআইটি একটি ভাগ করা ডেটা স্ট্রাকচার এবং একবারে শুধুমাত্র একটি থ্রেড এটি অ্যাক্সেস করে তা নিশ্চিত করার জন্য কিছু সিঙ্ক্রোনাইজেশন প্রয়োজন। যদিও এডব্লিউটি এবং সুইং জিইউআই উপাদানগুলি তৈরি এবং অ্যাক্সেস করার জন্য (থ্রেড অনিরাপদ) পদ্ধতিগুলি প্রকাশ করে এবং এই পদ্ধতিগুলি সমস্ত অ্যাপ্লিকেশন থ্রেডে দৃশ্যমান হয়, একইভাবে অন্যান্য জিইউআই কাঠামোর ক্ষেত্রে, শুধুমাত্র একটি একক, ইভেন্ট ডিসপ্যাচিং থ্রেডের এই পদ্ধতিগুলি কার্যকর করার অধিকার রয়েছে। যেহেতু প্রোগ্রামাররা প্রায়শই এই প্রয়োজনীয়তাটি মিস করে, তাই তৃতীয় পক্ষের লুক অ্যান্ড ফিলস, যেমন সাবস্ট্যান্স, এই ধরনের কোডিং ভুল রোধ করার জন্য ইভেন্ট ডিসপ্যাচ থ্রেডের মধ্যে না চলার সময় কোনও সুইং উপাদানকে তাত্ক্ষণিকভাবে অস্বীকার করতে অস্বীকার করে। জিইউআই-এ প্রবেশাধিকার সিরিয়ালাইজ করা হয় এবং অন্যান্য থ্রেডগুলি ইডিটি বার্তা সারির মাধ্যমে ইডিটি-তে কার্যকর করার জন্য কিছু কোড জমা দিতে পারে। অর্থাৎ, একইভাবে অন্যান্য জিইউআই কাঠামোর মধ্যে, ইভেন্ট ডিসপ্যাচিং থ্রেড তার জীবন পাম্পিং বার্তা ব্যয় করেঃ এটি জিইউআই-এর মাধ্যমে সম্পাদিত কর্মের একটি বার্তা সারি বজায় রাখে। এই অনুরোধগুলি সিস্টেম এবং যে কোনও অ্যাপ্লিকেশন থ্রেডের মাধ্যমে সারিতে জমা দেওয়া হয়। ইডিটি একের পর এক এগুলি ব্যবহার করে এবং জিইউআই উপাদানগুলি আপডেট করে সাড়া দেয়। বার্তাগুলি সুপরিচিত ক্রিয়া হতে পারে বা কলব্যাক জড়িত থাকতে পারে, ব্যবহারকারী-পদ্ধতির উল্লেখ যা ইডিটি-র মাধ্যমে কার্যকর করা আবশ্যক। সমস্ত বার্তার উপর আরোপিত গুরুত্বপূর্ণ প্রয়োজনীয়তা হল যে জিইউআই প্রতিক্রিয়াশীল থাকার জন্য সেগুলি অবশ্যই দ্রুত কার্যকর করতে হবে। অন্যথায়, বার্তা লুপটি অবরুদ্ধ করা হয় এবং জিইউআই হিমায়িত হওয়ার অভিজ্ঞতা হয়। ইডিটি-তে ব্যবহারকারীর কোড জমা দেওয়া ইডিটি-তে কোড জমা দেওয়ার এবং লুপটি ব্লক না করে দীর্ঘ কাজ সম্পাদনের জন্য বিভিন্ন সমাধান রয়েছে। কম্পোনেন্ট ইভেন্ট হ্যান্ডলার (শ্রোতারা) জিইউআই উপাদানগুলি শ্রবণকারী নামে পরিচিত কলব্যাকের তালিকা সমর্থন করে, যা সাধারণত উপাদানগুলি তৈরি করার সময় জনবহুল হয়। ইডিটি শ্রোতাদের কার্যকর করে যখন ব্যবহারকারী কোনওভাবে উপাদানগুলিকে উত্তেজিত করে (বোতাম ক্লিক করা হয়, মাউস সরানো হয়, আইটেম নির্বাচন করা হয়, ফোকাস হারিয়ে যায়, উপাদানের আকার পরিবর্তন করা হয় ইত্যাদি)। সংক্ষিপ্ত কাজগুলির জন্য যা পর্যায়ক্রমে বা নির্দিষ্ট সময়ে জিইউআই অ্যাক্সেস/সংশোধন করতে হবে, javax.swing.Timer ব্যবহার করা হয়। এটিকে একটি অদৃশ্য জিইউআই উপাদান হিসাবে বিবেচনা করা যেতে পারে, যার শ্রোতারা নির্দিষ্ট সময়ে গুলি চালানোর জন্য নিবন্ধিত। সমতুল্য System.Windows.Forms.Timer-. NET ফ্রেমওয়ার্ক flash.utils.Timer-অন্যান্য থ্রেড থেকে অ্যাডোবি ফ্ল্যাশ অনুরোধ অন্যান্য অ্যাপ্লিকেশন থ্রেডগুলি হেল্পার ক্লাসের মাধ্যমে (অথবা আপনি যদি AWT করছেন) থ্রেড প্রেরণের ইভেন্টে কার্যকর করার জন্য কিছু কোড পাস করতে পারে। জমা দেওয়া কোডটি অবশ্যই একটি বস্তুর সাথে আবৃত থাকতে হবে। এই শ্রেণীর দুটি পদ্ধতি অনুমতি দেয়ঃ ইভেন্ট প্রেরণ থ্রেড থেকে সিঙ্ক্রোনাস কোড এক্সিকিউশন (বা) এবং অ্যাসিঙ্ক্রোনাস কোড এক্সিকিউশন (বা)। ইভেন্ট ডিসপ্যাচিং থ্রেড থেকে ইনভোক অ্যান্ডওয়েট () পদ্ধতিটি কখনই কল করা উচিত নয়-এটি একটি ব্যতিক্রম নিক্ষেপ করবে। বর্তমান থ্রেডটি ইভেন্ট প্রেরণের থ্রেড কিনা তা নির্ধারণ করার জন্য পদ্ধতি বা কল করা যেতে পারে। ই. ডি. টি-কে ইনভোকলেটার এবং ইনভোকএন্ডওয়েট-এর মাধ্যমে সরবরাহ করা কোডটি হিমায়িত হওয়া রোধ করতে যত দ্রুত সম্ভব হওয়া উচিত। এগুলি সাধারণত জিইউআই (ব্যবহারকারী)-এর কাছে একটি দীর্ঘ গণনার ফলাফল সরবরাহ করার উদ্দেশ্যে করা হয়। ওয়ার্কার ডিজাইন প্যাটার্ন অন্য একটি থ্রেডে একটি কাজ সম্পাদন এবং ইডিটিতে ফলাফল উপস্থাপন উভয়ই ওয়ার্কার ডিজাইন প্যাটার্নের মাধ্যমে একত্রিত করা যেতে পারে। সান মাইক্রোসিস্টেমস দ্বারা বিকশিত javax.swing.SwingWorker শ্রেণীটি ওয়ার্কার ডিজাইন প্যাটার্নের একটি বাস্তবায়ন এবং জাভা 6 স্ট্যান্ডার্ড সুইং ডিস্ট্রিবিউশনের অংশ। সুইং ওয়ার্কারকে সাধারণত ইডিটি-এক্সিকিউট ইভেন্ট লিসনার থেকে একটি দীর্ঘ কাজ করার জন্য আহ্বান করা হয় যাতে ইডিটি ব্লক না হয়। নমুনা সুইং ওয়ার্কার <ডকুমেন্ট, ভয়েড> কর্মী = নতুন সুইং ওয়ার্কার <ডকুমেন্ট, ভয়েড> () {পাবলিক ডকুমেন্ট ডুইনব্যাকগ্রাউন্ড () নিক্ষেপ করে আইওএক্সসেপশন {রিটার্ন লোডএক্সএমএল ();// হেভি টাস্ক} সর্বজনীন অকার্যকর () {ট্রাই {ডকুমেন্ট ডক = গেট (); ডিসপ্লে (ডক);} ক্যাচ (এক্সসেপশন এক্স) {ex.printStackTrace ();}}; worker.execute (); আপনি যদি গ্রুভি এবং groovy.swing.SwingBuilder ব্যবহার করেন, আপনি ডোলেটার (), ডু আউটসাইড () এবং এড্ট () ব্যবহার করতে পারেন। তারপর আপনি এটিকে আরও সহজভাবে এভাবে লিখতে পারেনঃ ডুআউটসাইড {ডেফ ডক = লোডএক্সএমএল ()// হেভি টাস্ক এড্ট {ডিসপ্লে (ডক)}} সমতুল্য System.ComponentModel.BackgroundWorker-. নেট ফ্রেমওয়ার্ক flash.system.Worker-অ্যাডোবি ফ্ল্যাশ android.os.AsyncTask-অ্যান্ড্রয়েড মডেল এক্সিকিউশন সুইং ওয়ার্কার সাধারণত কলব্যাক (শ্রোতা) ইভেন্টগুলি পরিচালনা করার সময় ইডিটি দ্বারা দীর্ঘ কাজের জন্য তৈরি করা হয়। একটি শ্রমিক সূত্র অঙ্কন করে, ইডিটি শ্রমিকের কাজ শেষ হওয়ার জন্য অপেক্ষা না করেই বর্তমান বার্তা পরিচালনা করতে থাকে। প্রায়শই, এটি কাম্য নয়। প্রায়শই, আপনার ইডিটি একটি জিইউআই কম্পোনেন্ট অ্যাকশন পরিচালনা করে, যা ব্যবহারকারীকে অন্য একটি ডায়ালগের মাধ্যমে পছন্দ করার দাবি করে, যেমন জেফাইলচুজার, যা পপ আপ হয়, প্রতিক্রিয়াশীল থাকে যখন ব্যবহারকারী তার বিকল্পটি বেছে নেয় এবং "ওকে" বোতামটি চাপার পরেই নির্বাচিত ফাইলের সাথে কাজ এগিয়ে যায়। আপনি দেখুন, এটি সময় নেয় (ব্যবহারকারী কয়েক সেকেন্ডের মধ্যে প্রতিক্রিয়া জানায়) এবং ইডিটি ব্লক করার সময় আপনার একটি প্রতিক্রিয়াশীল জিইউআই (বার্তাগুলি এখনও ইডিটিতে পাম্প করা থাকে) প্রয়োজন (এটি নতুন পরিচালনা করে না, যেমন। জেফাইলচোজার, ডায়ালগ বন্ধ হওয়ার আগে সারিতে থাকা বার্তা এবং বর্তমান কম্পোনেন্ট অ্যাকশন শেষ)। ইডিটি একটি নতুন বার্তা লুপে প্রবেশ করার মাধ্যমে দুষ্টচক্রটি ভেঙে যায়, যা "মোডাল ডায়ালগ শেষ" না হওয়া পর্যন্ত স্বাভাবিক বার্তা প্রেরণ করে এবং উপাদান ক্রিয়ায় অবরুদ্ধ অবস্থান থেকে স্বাভাবিক বার্তা প্রক্রিয়াকরণ পুনরায় শুরু হয়। ওপেন সোর্স ফক্সট্রট প্রকল্পটি নির্বিচারে ব্যবহারকারীর কাজগুলির জন্য "সিঙ্ক্রোনাস" এক্সিকিউশন প্রক্রিয়া সরবরাহ করতে সুইং বার্তা লুপ পাম্পিং অনুকরণ করে, যা শ্রমিক কাজটি শেষ করার পরেই এগিয়ে যায়। button.addActionListener (নতুন অ্যাকশনলিস্টনার () {সর্বজনীন অকার্যকর অ্যাকশনপারফর্মড (অ্যাকশনইভেন্ট ই) {button.setText ("স্লিপিং"); স্ট্রিং টেক্সট = নাল; চেষ্টা করুন {টেক্সট = (স্ট্রিং) Worker.post (নতুন টাস্ক () {সর্বজনীন অবজেক্ট রান () থ্রো এক্সসেপশন {Thread.sleep (10000); ফেরত দিন "স্লিপ! ";}});} ক্যাচ (এক্সসেপশন x). button.setText (টেক্সট); কিছু এলস ();}); জাভা 1.7 থেকে, জাভা ইভেন্টকিউ () সিস্টেমে ক্রিয়েটসেকনডারীলুপ () প্রকাশ করে কাস্টম সেকেন্ডারি মেসেজ লুপগুলির জন্য স্ট্যান্ডার্ড সমাধান প্রদান করে। এছাড়াও দেখুন অ্যাবস্ট্রাক্ট উইন্ডো টুলকিট (এডব্লিউটি) সুইং (জাভা) সুইং ওয়ার্কার কম্পোনেন্টআপডেটথ্রেড রেফারেন্স এক্সটার্নাল লিঙ্ক (সুইং এপিআই জাভাডক ডকুমেন্টেশন) (এডব্লিউটি এপিআই জাভাডক ডকুমেন্টেশন) ইভেন্ট-ডিসপ্যাচিং থ্রেড সুইং ওয়ার্কার বর্ণনা সুইং টিউটোরিয়াল এডব্লিউটি/সুইং ইভেন্ট হ্যান্ডলিং নিবন্ধ থেকে ইভেন্ট পাম্পিং, ডিসপ্যাচ এবং প্রসেসিং এবং ইডিটি ফক্সট্রট প্রকল্পের হোম পেজ জাভা (প্রোগ্রামিং ভাষা)