Event dispatching thread
ایونٹ ڈسپیچنگ تھریڈ (ای ڈی ٹی) ایک بیک گراؤنڈ تھریڈ ہے جو جاوا میں ایبسٹرکٹ ونڈو ٹول کٹ (اے ڈبلیو ٹی) گرافیکل یوزر انٹرفیس ایونٹ کیو سے ایونٹس پر کارروائی کرنے کے لیے استعمال ہوتا ہے۔ یہ ایونٹ پر مبنی پروگرامنگ کے عام تصور کی ایک مثال ہے، جو جاوا کے علاوہ بہت سے دوسرے سیاق و سباق میں مقبول ہے، مثال کے طور پر، ویب براؤزر، یا ویب سرور۔ واقعات بنیادی طور پر اپ ڈیٹ ہونے والے واقعات ہوتے ہیں جو صارف انٹرفیس کے اجزاء کو خود کو دوبارہ تیار کرنے کا سبب بنتے ہیں، یا ان پٹ ڈیوائسز جیسے ماؤس یا کی بورڈ سے ان پٹ ایونٹس ہوتے ہیں۔ اے ڈبلیو ٹی سنگل تھریڈ پینٹنگ ماڈل کا استعمال کرتا ہے جس میں تمام اسکرین اپ ڈیٹس کو ایک ہی تھریڈ سے انجام دیا جانا چاہیے۔ دکھائی دینے والے یوزر انٹرفیس اجزاء کی بصری حالت کو اپ ڈیٹ کرنے کے لیے ایونٹ ڈسپیچنگ تھریڈ واحد درست تھریڈ ہے۔ دوسرے دھاگوں سے نظر آنے والے اجزاء کو اپ ڈیٹ کرنا جاوا پروگراموں میں بہت سے عام کیڑوں کا ذریعہ ہے جو سوئنگ استعمال کرتے ہیں۔ ایونٹ بھیجنے والے دھاگے کو ایڈوب فلیش میں ابتدائی کارکن اور ایس ڈبلیو ٹی،. NET فریم ورک اور اینڈرائڈ میں UI دھاگہ کہا جاتا ہے۔ GUI رسائی کو سیریلائز کرنے کے لیے میسج لوپ ایک سافٹ ویئر ایپلی کیشن عام طور پر متعدد دھاگوں اور ایک واحد GIT ڈیٹا ڈھانچے پر مشتمل ہوتی ہے۔ اس کا مطلب ہے کہ جی آئی ٹی ایک مشترکہ ڈیٹا ڈھانچہ ہے اور اس بات کو یقینی بنانے کے لیے کچھ ہم آہنگی کی ضرورت ہے کہ ایک وقت میں صرف ایک تھریڈ اس تک رسائی حاصل کرے۔ اگرچہ اے ڈبلیو ٹی اور سوئنگ جی یو آئی اجزاء کو بنانے اور ان تک رسائی حاصل کرنے کے (تھریڈ غیر محفوظ) طریقوں کو بے نقاب کرتے ہیں اور یہ طریقے تمام ایپلیکیشن تھریڈز کو نظر آتے ہیں، اسی طرح دوسرے جی یو آئی فریم ورک میں، صرف ایک، ایونٹ ڈسپیچنگ تھریڈ کو ان طریقوں کو انجام دینے کا حق حاصل ہے۔ چونکہ پروگرامر اکثر اس ضرورت سے محروم رہتے ہیں، اس طرح کی کوڈنگ کی غلطی کو روکنے کے لیے تھرڈ پارٹی لک اینڈ فیلز، جیسے سبسٹینس ایونٹ ڈسپیچ تھریڈ کے اندر نہ چلنے پر کسی بھی سوئنگ جزو کو فوری کرنے سے انکار کرنے تک جاتا ہے۔ جی یو آئی تک رسائی سلسلہ وار ہوتی ہے اور دوسرے دھاگے ای ڈی ٹی پیغام کی قطار کے ذریعے ای ڈی ٹی میں عمل درآمد کے لیے کچھ کوڈ جمع کر سکتے ہیں۔ یعنی، اسی طرح دوسرے جی یو آئی فریم ورک میں، ایونٹ ڈسپیچنگ تھریڈ اپنی زندگی پمپنگ پیغامات گزارتا ہے: یہ جی یو آئی پر انجام دیئے جانے والے اعمال کی پیغام کی قطار کو برقرار رکھتا ہے۔ یہ درخواستیں نظام کے لحاظ سے اور کسی بھی درخواست کے دھاگے کے ذریعے قطار میں جمع کرائی جاتی ہیں۔ ای ڈی ٹی ایک کے بعد ایک ان کا استعمال کرتا ہے اور جی یو آئی اجزاء کو اپ ڈیٹ کرکے جواب دیتا ہے۔ پیغامات معروف اعمال ہو سکتے ہیں یا کال بیکس، صارف کے طریقوں کے حوالے شامل ہو سکتے ہیں جنہیں ای ڈی ٹی کے ذریعے انجام دیا جانا چاہیے۔ تمام پیغامات پر عائد اہم ضرورت یہ ہے کہ جی یو آئی کے جواب دہ رہنے کے لیے انہیں فوری طور پر انجام دیا جانا چاہیے۔ بصورت دیگر، میسج لوپ بلاک ہو جاتا ہے اور جی یو آئی منجمد ہونے کا تجربہ ہوتا ہے۔ ای ڈی ٹی میں صارف کا کوڈ جمع کرنا ای ڈی ٹی میں کوڈ جمع کرنے اور لوپ کو بلاک کیے بغیر طویل کام انجام دینے کے مختلف حل ہیں۔ اجزاء ایونٹ ہینڈلرز (سننے والے) GUI اجزاء کال بیکس کی فہرستوں کی حمایت کرتے ہیں، جنہیں سننے والے کہا جاتا ہے، جو عام طور پر اجزاء کی تخلیق کے وقت آباد ہوتے ہیں۔ ای ڈی ٹی سننے والوں کو اس وقت چلاتا ہے جب صارف کسی طرح اجزاء کو پرجوش کرتا ہے (بٹن کلک کیا جاتا ہے، ماؤس منتقل کیا جاتا ہے، آئٹم منتخب کیا جاتا ہے، فوکس کھو جاتا ہے، جزو کا سائز تبدیل کیا جاتا ہے وغیرہ)۔ ٹائمر مختصر کاموں کے لیے جن میں وقتا فوقتا یا مخصوص وقت پر GUI تک رسائی/ترمیم کرنا ضروری ہے، javax.swing.Timer استعمال کیا جاتا ہے۔ اسے ایک پوشیدہ GUI جزو سمجھا جا سکتا ہے، جس کے سننے والے مخصوص وقت پر فائر کرنے کے لیے رجسٹرڈ ہوتے ہیں۔ مساوی System.Windows.Forms.Timer-. NET فریم ورک flash.utils.Timer-دیگر تھریڈز سے ایڈوب فلیش کی درخواستیں دیگر ایپلیکیشن تھریڈز ہیلپر کلاسز (یا اگر آپ AWT کر رہے ہیں) کے ذریعے تھریڈ بھیجنے کی صورت میں کچھ کوڈ پاس کر سکتے ہیں۔ جمع کردہ کوڈ کو کسی آبجیکٹ کے ساتھ لپیٹنا چاہیے۔ ان کلاسوں کے دو طریقے اجازت دیتے ہیں: سنکرونس کوڈ پر عمل درآمد (یا) اور ایونٹ ڈسپیچنگ تھریڈ سے اسنکرونس کوڈ پر عمل درآمد (یا)۔ انوک اینڈ ویٹ () کا طریقہ کبھی بھی ایونٹ ڈسپیچنگ تھریڈ سے نہیں بلایا جانا چاہیے-یہ اس سے مستثنی ہوگا۔ طریقہ کار یا اس بات کا تعین کرنے کے لیے بلایا جا سکتا ہے کہ آیا موجودہ دھاگہ واقعہ بھیجنے والا دھاگہ ہے۔ انوک لیٹر اور انوک اینڈ ویٹ کے ذریعے ای ڈی ٹی کو فراہم کیا گیا کوڈ منجمد ہونے سے بچنے کے لیے جتنا ممکن ہو تیز ہونا چاہیے۔ ان کا مقصد عام طور پر جی یو آئی (صارف) کو طویل حساب کتاب کا نتیجہ فراہم کرنا ہوتا ہے۔ ورکر ڈیزائن پیٹرن کسی کام کو دوسرے دھاگے میں انجام دینے اور ای ڈی ٹی میں نتائج پیش کرنے دونوں کو ورکر ڈیزائن پیٹرن کے ذریعے جوڑا جا سکتا ہے۔ javax.swing.SwingWorker کلاس، جسے سن مائیکرو سسٹمز نے تیار کیا ہے، ورکر ڈیزائن پیٹرن کا نفاذ ہے، اور جاوا 6 معیاری سوئنگ ڈسٹری بیوشن کا حصہ ہے۔ سوئنگ ورکر کو عام طور پر ای ڈی ٹی کے ذریعے انجام دیے گئے ایونٹ لزنر سے ایک طویل کام انجام دینے کے لیے بلایا جاتا ہے تاکہ ای ڈی ٹی کو بلاک نہ کیا جا سکے۔ نمونے سوئنگ ورکر <دستاویز، وایڈ> کارکن = نیا سوئنگ ورکر <دستاویز، وایڈ> () {عوامی دستاویز ڈو ان بیک گراؤنڈ () آئی او ایکسسیپشن [ریٹرن لوڈ ایکس ایم ایل () ؛// ہیوی ٹاسک] عوامی وایڈ کرتا ہے () {آزمائیں {دستاویز ڈاک = حاصل کریں () ؛ ڈسپلے (ڈاک) ؛} کیچ (استثناء سابقہ) {ex.printStackTrace () ؛}} ؛ worker.execute () ؛ اگر آپ گرووی اور groovy.swing.SwingBuilder استعمال کرتے ہیں، تو آپ ڈو لیٹر ()، ڈو آؤٹ سائیڈ ()، اور ای ڈی ٹی () استعمال کر سکتے ہیں۔ پھر آپ اسے مزید آسانی سے اس طرح لکھ سکتے ہیں: ڈو آؤٹ سائیڈ {ڈیف ڈاک = لوڈ ایکس ایم ایل ()// ہیوی ٹاسک ایڈٹ {ڈسپلے (ڈاک)} مساوی System.ComponentModel.BackgroundWorker-. NET فریم ورک flash.system.Worker-ایڈوب فلیش android.os.AsyncTask-اینڈرائیڈ ماڈل ایگزیکیوشن سوئنگ ورکر عام طور پر کال بیک (سننے والے) ایونٹس کو سنبھالتے ہوئے ای ڈی ٹی کے ذریعے طویل کاموں کے لیے بنایا جاتا ہے۔ کارکن کے دھاگے کو اگاتے ہوئے، ای ڈی ٹی کارکن کے مکمل ہونے کا انتظار کیے بغیر موجودہ پیغام کو سنبھالنا جاری رکھتا ہے۔ اکثر، یہ مطلوب نہیں ہے۔ اکثر، آپ کا ای ڈی ٹی ایک جی یو آئی جزو ایکشن کو سنبھالتا ہے، جو صارف سے دوسرے ڈائیلاگ کے ذریعے انتخاب کرنے کا مطالبہ کرتا ہے، جیسے جے فائل چوزر، جو پاپ اپ ہوتا ہے، جواب دہ رہتا ہے جبکہ صارف اپنا آپشن چنتا ہے اور "اوکے" بٹن دبانے کے بعد ہی منتخب فائل کے ساتھ ایکشن آگے بڑھتا ہے۔ آپ دیکھیں، اس میں وقت لگتا ہے (صارف سیکنڈوں کے معاملے میں جواب دیتا ہے) اور آپ کو اس سارے وقت کے دوران ایک ذمہ دار جی یو آئی (پیغامات اب بھی ای ڈی ٹی میں پمپ کیے جاتے ہیں) کی ضرورت ہوتی ہے جب کہ ای ڈی ٹی بلاک ہو رہا ہوتا ہے (یہ نئے کو ہینڈل نہیں کرتا ہے، مثال کے طور پر۔ جے فائل چوزر، ڈائیلاگ بند ہونے اور موجودہ جزو کی کارروائی ختم ہونے سے پہلے قطار میں موجود پیغامات)۔ ایک نئے میسج لوپ میں داخل ہونے والے ای ڈی ٹی کے ذریعے شیطانی چکر کو توڑا جاتا ہے، جو پیغامات کو معمول کے مطابق بھیجتا ہے جب تک کہ "موڈل ڈائیلاگ ختم نہ ہو جائے" اور جزو کی کارروائی میں مسدود پوزیشن سے عام میسج پروسیسنگ دوبارہ شروع نہ ہو جائے۔ اوپن سورس فوکسٹروٹ پروجیکٹ صوابدیدی صارف کے کاموں کے لیے "سنکرونس" ایگزیکیوشن میکانزم فراہم کرنے کے لیے سوئنگ میسج لوپ پمپنگ کی تقلید کرتا ہے، جو کارکن کے کام مکمل کرنے کے بعد ہی آگے بڑھتا ہے۔ button.addActionListener (نیا ایکشن لسٹنر () {پبلک وایڈ ایکشنپرفارمڈ (ایکشن ایوینٹ ای) {button.setText ("سلیپنگ") ؛ سٹرنگ ٹیکسٹ = نیل ؛ آزمائیں {ٹیکسٹ = (سٹرنگ) Worker.post (نیا ٹاسک () {پبلک آبجیکٹ رن () تھرو مستثنی {Thread.sleep (10000) ؛ واپس کریں "سلیپٹ! "؛}}) ؛} کیچ (مستثنی x)۔ button.setText (متن) ؛ کچھ ایلس () ؛}) ؛ چونکہ جاوا 1.7، جاوا سسٹم EventQueue () میں تخلیق سیکنڈری لوپ () کو بے نقاب کرکے کسٹم سیکنڈری میسج لوپس کے لیے معیاری حل فراہم کرتا ہے۔ خلاصہ ونڈو ٹول کٹ (اے ڈبلیو ٹی) سوئنگ (جاوا) سوئنگ ورکر کمپونینٹ اپ ڈیٹ تھریڈ حوالہ جات بیرونی لنکس (سوئنگ اے پی آئی جاواڈوک دستاویزات) (اے ڈبلیو ٹی اے پی آئی جاواڈوک دستاویزات) سوئنگ ٹیوٹوریل اے ڈبلیو ٹی/سوئنگ ایونٹ ہینڈلنگ آرٹیکل ایونٹ پمپنگ، ڈسپیچ اینڈ پروسیسنگ، اور ای ڈی ٹی فوکسٹروٹ پروجیکٹ ہوم پیج جاوا (پروگرامنگ زبان) سے ایونٹ ڈسپیچنگ تھریڈ سوئنگ ورکر کی تفصیل بھی دیکھیں۔