Event dispatching thread
ઇવેન્ટ ડિસ્પેચિંગ થ્રેડ (EDT) એ એબ્સ્ટ્રેક્ટ વિન્ડો ટૂલકિટ (AWT) ગ્રાફિકલ યુઝર ઇન્ટરફેસ ઇવેન્ટ કતારમાંથી ઇવેન્ટ્સ પર પ્રક્રિયા કરવા માટે જાવામાં વપરાતો બેકગ્રાઉન્ડ થ્રેડ છે. તે ઇવેન્ટ-સંચાલિત પ્રોગ્રામિંગની સામાન્ય વિભાવનાનું એક ઉદાહરણ છે, જે જાવા સિવાયના અન્ય ઘણા સંદર્ભોમાં લોકપ્રિય છે, ઉદાહરણ તરીકે, વેબ બ્રાઉઝર્સ અથવા વેબ સર્વર્સ. ઇવેન્ટ્સ મુખ્યત્વે અપડેટ ઇવેન્ટ્સ છે જે વપરાશકર્તા ઇન્ટરફેસ ઘટકોને પોતાને ફરીથી દોરવાનું કારણ બને છે, અથવા માઉસ અથવા કીબોર્ડ જેવા ઇનપુટ ઉપકરણોમાંથી ઇનપુટ ઇવેન્ટ્સ છે. AWT સિંગલ-થ્રેડેડ પેઇન્ટિંગ મોડેલનો ઉપયોગ કરે છે જેમાં તમામ સ્ક્રીન અપડેટ્સ એક જ થ્રેડમાંથી કરવા આવશ્યક છે. દૃશ્યમાન વપરાશકર્તા ઈન્ટરફેસ ઘટકોની દ્રશ્ય સ્થિતિને અપડેટ કરવા માટે ઇવેન્ટ રવાનગી થ્રેડ એકમાત્ર માન્ય થ્રેડ છે. અન્ય થ્રેડોમાંથી દૃશ્યમાન ઘટકોને અપડેટ કરવું એ જાવા પ્રોગ્રામ્સમાં ઘણી સામાન્ય ભૂલોનો સ્રોત છે જે સ્વિંગનો ઉપયોગ કરે છે. ઇવેન્ટ રવાનગી થ્રેડને એડોબ ફ્લેશમાં પ્રાથમિક કાર્યકર અને એસડબલ્યુટી, ડોટ નેટ ફ્રેમવર્ક અને એન્ડ્રોઇડમાં યુઆઈ થ્રેડ કહેવામાં આવે છે. GUI ઍક્સેસને શ્રેણીબદ્ધ કરવા માટે સંદેશ લૂપ સોફ્ટવેર એપ્લિકેશનમાં સામાન્ય રીતે બહુવિધ થ્રેડો અને એક જ GIT ડેટા માળખું હોય છે. આનો અર્થ એ છે કે GIT એ વહેંચાયેલ ડેટા માળખું છે અને એક સમયે માત્ર એક જ થ્રેડ તેને ઍક્સેસ કરે છે તેની ખાતરી કરવા માટે કેટલાક સુમેળની જરૂર છે. જો કે AWT અને સ્વિંગ GUI ઘટકો બનાવવા અને ઍક્સેસ કરવા માટેની (થ્રેડ અસુરક્ષિત) પદ્ધતિઓને છતી કરે છે અને આ પદ્ધતિઓ તમામ એપ્લિકેશન થ્રેડો માટે દૃશ્યમાન છે, તેવી જ રીતે અન્ય GUI માળખામાં, માત્ર એક જ, ઇવેન્ટ ડિસ્પેચિંગ થ્રેડને આ પદ્ધતિઓને અમલમાં મૂકવાનો અધિકાર છે. પ્રોગ્રામરો ઘણીવાર આ જરૂરિયાતને ચૂકી જતા હોવાથી, થર્ડ-પાર્ટી લુક એન્ડ ફીલ્સ, જેમ કે સબસ્ટન્સ, આવી કોડિંગ ભૂલને રોકવા માટે, જ્યારે ઇવેન્ટ ડિસ્પેચ થ્રેડમાં ન ચાલે ત્યારે કોઈપણ સ્વિંગ ઘટકને ત્વરિત કરવાનો ઇનકાર કરે છે. GUI ની પહોંચ શ્રેણીબદ્ધ છે અને અન્ય થ્રેડો EDT સંદેશ કતાર દ્વારા EDT માં ચલાવવા માટે કેટલાક કોડ સબમિટ કરી શકે છે. એટલે કે, એ જ રીતે અન્ય GUI માળખામાં, ઇવેન્ટ ડિસ્પેચિંગ થ્રેડ તેના જીવન પંપીંગ સંદેશાઓ વિતાવે છેઃ તે GUI પર કરવા માટેની ક્રિયાઓની સંદેશ કતાર જાળવે છે. આ વિનંતીઓ સિસ્ટમ દ્વારા અને કોઈપણ એપ્લિકેશન થ્રેડ દ્વારા કતારમાં સબમિટ કરવામાં આવે છે. EDT એક પછી એક તેનો વપરાશ કરે છે અને GUI ઘટકોને અપડેટ કરીને પ્રતિક્રિયા આપે છે. સંદેશાઓ જાણીતી ક્રિયાઓ હોઈ શકે છે અથવા તેમાં કોલબેક સામેલ હોઈ શકે છે, જે વપરાશકર્તા-પદ્ધતિઓના સંદર્ભો છે જેને EDT દ્વારા ચલાવવા આવશ્યક છે. તમામ સંદેશાઓ પર લાદવામાં આવેલી મહત્વપૂર્ણ જરૂરિયાત એ છે કે GUI પ્રતિભાવશીલ રહેવા માટે તેમને ઝડપથી અમલમાં મૂકવા આવશ્યક છે. નહિંતર, સંદેશ લૂપ અવરોધિત છે અને GUI ફ્રીઝિંગનો અનુભવ થાય છે. ઇ. ડી. ટી. ને વપરાશકર્તા કોડ સબમિટ કરવો ઇ. ડી. ટી. ને કોડ સબમિટ કરવા અને લૂપને અવરોધિત કર્યા વિના લાંબા કાર્યો કરવા માટે વિવિધ ઉકેલો છે. કોમ્પોનન્ટ ઇવેન્ટ હેન્ડલર્સ (શ્રોતાઓ) GUI ઘટકો કોલબેક્સની સૂચિને ટેકો આપે છે, જેને શ્રોતાઓ કહેવાય છે, જે સામાન્ય રીતે જ્યારે ઘટકો બનાવવામાં આવે ત્યારે રચાય છે. જ્યારે વપરાશકર્તા કોઈક રીતે ઘટકોને ઉત્તેજિત કરે છે ત્યારે EDT શ્રોતાઓને અમલમાં મૂકે છે (બટન ક્લિક કરવામાં આવે છે, માઉસ ખસેડવામાં આવે છે, આઇટમ પસંદ કરવામાં આવે છે, ફોકસ ખોવાઈ જાય છે, ઘટકનું કદ બદલવામાં આવે છે અને તેથી વધુ.) ટૂંકા કાર્યો માટે કે જે સમયાંતરે અથવા ચોક્કસ સમયે GUI ને ઍક્સેસ/સંશોધિત કરવું આવશ્યક છે, javax.swing.Timer નો ઉપયોગ થાય છે. તેને અદ્રશ્ય GUI ઘટક તરીકે ગણી શકાય, જેના શ્રોતાઓ ચોક્કસ સમયે ગોળીબાર કરવા માટે નોંધાયેલા હોય છે. સમકક્ષ System.Windows.Forms.Timer-. NET ફ્રેમવર્ક flash.utils.Timer-અન્ય થ્રેડોમાંથી એડોબ ફ્લેશ વિનંતીઓ અન્ય એપ્લિકેશન થ્રેડો સહાયક વર્ગોના માધ્યમથી (અથવા જો તમે AWT કરી રહ્યા હોવ તો) થ્રેડ મોકલવાની ઘટનામાં ચલાવવા માટે કેટલાક કોડ પસાર કરી શકે છે. સબમિટ કરેલ કોડ ઑબ્જેક્ટ સાથે આવરિત હોવો આવશ્યક છે. આ વર્ગોની બે પદ્ધતિઓ પરવાનગી આપે છેઃ ઘટના મોકલવાના થ્રેડમાંથી સિંક્રનસ કોડ એક્ઝેક્યુશન (અથવા) અને એસિંક્રોનસ કોડ એક્ઝેક્યુશન (અથવા). ઇન્વોક એન્ડવેટ () પદ્ધતિને ઇવેન્ટ રવાનગી થ્રેડમાંથી ક્યારેય બોલાવવી જોઈએ નહીં-તે એક અપવાદ ફેંકશે. પદ્ધતિ અથવા તે નક્કી કરવા માટે કૉલ કરી શકાય છે કે વર્તમાન થ્રેડ ઇવેન્ટ રવાનગી થ્રેડ છે કે નહીં. ઈ. ડી. ટી. ને ઇન્વોક લેટર અને ઇન્વોક એન્ડ વેઇટ દ્વારા પૂરો પાડવામાં આવેલ કોડ શક્ય તેટલો ઝડપી હોવો જોઈએ જેથી ઠંડું ન થાય. તેઓ સામાન્ય રીતે GUI (વપરાશકર્તા) ને લાંબી ગણતરીનું પરિણામ પહોંચાડવાનો હેતુ ધરાવે છે. કામદાર ડિઝાઇન પેટર્ન અન્ય થ્રેડમાં કાર્યનું અમલીકરણ અને ઇ. ડી. ટી. માં પરિણામો રજૂ કરવા બંનેને કામદાર ડિઝાઇન પેટર્ન દ્વારા જોડી શકાય છે. સન માઇક્રોસિસ્ટમ્સ દ્વારા વિકસાવવામાં આવેલ javax.swing.SwingWorker વર્ગ, કામદાર ડિઝાઇન પેટર્નનું અમલીકરણ છે, અને જાવા 6 પ્રમાણભૂત સ્વિંગ વિતરણનો એક ભાગ છે. ઇ. ડી. ટી. ને અવરોધિત ન કરવા માટે લાંબી કામગીરી કરવા માટે સામાન્ય રીતે ઇ. ડી. ટી.-એક્ઝિક્યુટેડ ઇવેન્ટ લિસનરમાંથી સ્વિંગવર્કરનો ઉપયોગ કરવામાં આવે છે. નમૂનાઓ સ્વિંગ વર્કર <ડોક્યુમેન્ટ, વોઈડ> વર્કર = નવું સ્વિંગ વર્કર <ડોક્યુમેન્ટ, વોઈડ> () {પબ્લિક ડોક્યુમેન્ટ ડોઇનબેકગ્રાઉન્ડ () IOExસેપશનને ફેંકી દે છે {રીટર્ન લોડ XML ();// હેવી ટાસ્ક} પબ્લિક વોઈડ () {અજમાવો {ડોક્યુમેન્ટ ડોક = મેળવો (); ડિસ્પ્લે (ડોક);} કેચ (અપવાદ ભૂતપૂર્વ) {ex.printStackTrace ();}}; worker.execute (); જો તમે ગ્રૂવી અને groovy.swing.SwingBuilder નો ઉપયોગ કરો છો, તો તમે ડોલેટર (), ડૂઆઉટસાઇડ () અને ઇડીટી () નો ઉપયોગ કરી શકો છો. પછી તમે તેને વધુ સરળ રીતે આ રીતે લખી શકો છોઃ ડુઆઉટસાઇડ {ડેફ ડોક = લોડ એક્સ. એમ. એલ. ()// હેવી ટાસ્ક એડીટી {ડિસ્પ્લે (ડોક)} સમકક્ષો <આઇ. ડી. 2>-. નેટ ફ્રેમવર્ક <આઇ. ડી. 1>-એડોબ ફ્લેશ <આઇ. ડી. 3>-એન્ડ્રોઇડ મોડલ એક્ઝિક્યુશન સ્વિંગ વર્કર સામાન્ય રીતે કોલબેક (શ્રોતા) ઇવેન્ટ્સને સંભાળતી વખતે ઇ. ડી. ટી. દ્વારા લાંબા કાર્યો માટે બનાવવામાં આવે છે. કામદારના દોરાને ઉકાળવાથી, ઇ. ડી. ટી. કામદારને પૂર્ણ થવાની રાહ જોયા વિના વર્તમાન સંદેશને સંભાળવાનું ચાલુ રાખે છે. ઘણીવાર, આ ઇચ્છનીય નથી. મોટેભાગે, તમારું EDT GUI ઘટક ક્રિયાને સંભાળે છે, જે વપરાશકર્તાને અન્ય સંવાદ દ્વારા પસંદગી કરવાની માંગ કરે છે, જેમ કે JFileChooser, જે પૉપ અપ થાય છે, પ્રતિભાવશીલ રહે છે જ્યારે વપરાશકર્તા તેનો વિકલ્પ પસંદ કરે છે અને "ઓકે" બટન દબાવ્યા પછી જ પસંદ કરેલી ફાઇલ સાથે ક્રિયા આગળ વધે છે. તમે જુઓ, આમાં સમય લાગે છે (વપરાશકર્તા સેકન્ડોમાં જવાબ આપે છે) અને તમને આ બધા સમય દરમિયાન પ્રતિભાવશીલ GUI (સંદેશાઓ હજુ પણ EDT માં પમ્પ કરવામાં આવે છે) ની જરૂર છે જ્યારે EDT અવરોધિત કરી રહ્યું હોય (તે નવા હેન્ડલ કરતું નથી, દા. ત. JFileChooser, સંવાદ બંધ થાય અને વર્તમાન ઘટક ક્રિયા સમાપ્ત થાય તે પહેલાં કતારમાંના સંદેશાઓ). દુષ્ટ ચક્રને ઇ. ડી. ટી. દ્વારા તોડવામાં આવે છે, જે નવા સંદેશ લૂપમાં પ્રવેશ કરે છે, જે "મોડલ સંવાદ સમાપ્ત થાય" ત્યાં સુધી સામાન્ય રીતે સંદેશા મોકલે છે અને ઘટક ક્રિયામાં અવરોધિત સ્થિતિમાંથી સામાન્ય સંદેશ પ્રક્રિયા ફરી શરૂ થાય છે. ઓપન સોર્સ ફોક્સટ્રોટ પ્રોજેક્ટ મનસ્વી વપરાશકર્તા કાર્યો માટે "સિંક્રનસ" એક્ઝેક્યુશન મિકેનિઝમ પ્રદાન કરવા માટે સ્વિંગ મેસેજ લૂપ પમ્પિંગનું અનુકરણ કરે છે, જે કાર્યકર કાર્ય પૂર્ણ કરે તે પછી જ આગળ વધે છે. button.addActionListener (નવું એક્શનલિસ્ટનર () {પબ્લિક વોઈડ એક્શનપરફોર્મડ (એક્શનઇવેન્ટ ઇ) {button.setText ("સ્લીપિંગ".); શબ્દમાળા લખાણ = નલ; પ્રયાસ કરો {ટેક્સ્ટ = (સ્ટ્રિંગ) Worker.post (નવું ટાસ્ક () {પબ્લિક ઓબ્જેક્ટ રન () થ્રો અપવાદ {Thread.sleep (10000); "સ્લીપ્ટ! ";}});} કેચ (અપવાદ x). button.setText (લખાણ); કંઈકઈલ્સ ();}); જાવા 1.7 થી, જાવા સિસ્ટમ EventQueue () માં ક્રિએટસેકન્ડરી લૂપ () ને ઉજાગર કરીને કસ્ટમ સેકન્ડરી મેસેજ લૂપ્સ માટે પ્રમાણભૂત ઉકેલ પ્રદાન કરે છે. એબ્સ્ટ્રેક્ટ વિન્ડો ટૂલકિટ (AWT) સ્વિંગ (જાવા) સ્વિંગ વર્કર કમ્પોનન્ટઅપડેટથ્રેડ સંદર્ભો બાહ્ય લિંક્સ (સ્વિંગ API જાવાડોક દસ્તાવેજીકરણ) (AWT API જાવાડોક દસ્તાવેજીકરણ) સ્વિંગ ટ્યુટોરિયલ AWT/સ્વિંગ ઇવેન્ટ હેન્ડલિંગ લેખમાંથી ઇવેન્ટ-ડિસ્પેચિંગ થ્રેડ સ્વિંગ વર્કરનું વર્ણન અને ઇવેન્ટ પમ્પિંગ, ડિસ્પેચ અને પ્રોસેસિંગ વિશેનો લેખ અને EDT ફોક્સટ્રોટ પ્રોજેક્ટનું હોમ પેજ જાવા (પ્રોગ્રામિંગ લેંગ્વેજ) પણ જુઓ.