º¹ÇÕ ½Ã½ºÅÛ¿¡ ´ëÇÑ ÁÖ¿ä ¹®Á¦ Áß Çϳª´Â Ÿ½ºÅ©°¡ ¼öÇà ÁßÀÎ µ¿¾È ½Å¼ÓÈ÷ ÀÀ´äÇÒ ¼ö ÀÖ´Â »óÅ·Π³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ¹®Á¦´Â È®Àå °¡´ÉÇÑ ½Ã½ºÅÛ¿¡¼ ÇÔ²² ½ÇÇàµÇµµ·Ï ÁöÁ¤µÇÁö ¾ÊÀº ÄÄÆ÷³ÍÆ®°¡ µ¿ÀÏÇÑ ÀÚ¿øÀ» °øÀ¯ÇÒ ¶§ ÈξÀ ´õ Å« ¹®Á¦°¡ µË´Ï´Ù. org.eclipse.core.runtime.jobs ÆÐŰÁö´Â ÇöÀç ½ÇÇà ÁßÀÎ Á¶ÀÛÀ» ½ºÄÉÁÙ, ½ÇÇà ¹× °ü¸®ÇÏ´Â ÇϺΠ±¸Á¶¸¦ Á¦°øÇÏ¿© ÀÌ ¹®Á¦¸¦ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇϺΠ±¸Á¶´Â ºñµ¿±â·Î ½ÇÇàµÉ ¼ö ÀÖ´Â ÀÛ¾÷ ´ÜÀ§¸¦ Ç¥½ÃÇÏ´Â ÀÛ¾÷ÀÇ »ç¿ëÀ» ±â¹ÝÀ¸·Î ÇÕ´Ï´Ù.
class TrivialJob extends Job { public TrivialJob() { super("Trivial Job"); } public IStatus run(IProgressMonitor monitor) { System.out.println("This is a job"); return Status.OK_STATUS; } }ÀÛ¾÷Àº ´ÙÀ½ ½º´ÏÆê¿¡ ÀÛ¼ºµÇ¾î ½ºÄÉÁٵ˴ϴÙ.
TrivialJob job = new TrivialJob(); System.out.println("About to schedule a job"); job.schedule(); System.out.println("Finished scheduling a job");ÀÌ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº ŸÀֿ̹¡ Á¿ìµË´Ï´Ù. Áï, ÀÛ¾÷ÀÇ run ¸Þ¼Òµå°¡ ÀÛ¾÷À» ÀÛ¼ºÇÏ°í ½ºÄÉÁÙÇÑ ½º·¹µå¿Í °ü·ÃÇÏ¿© ½ÇÇàµÇ´Â ½Ã±â¸¦ È®ÀÎÇÏ´Â ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. Ãâ·ÂÀº ´ÙÀ½ Áß ÇϳªÀÔ´Ï´Ù.
About to schedule a job This is a job Finished scheduling a job¶Ç´Â
About to schedule a job Finished scheduling a job This is a job
°è¼ÓÇϱâ Àü¿¡ ÀÛ¾÷ÀÌ ¿Ï·áµÇ¾ú´ÂÁö¸¦ È®ÀÎÇÏ·Á¸é join() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â ÀÛ¾÷ÀÌ ¿Ï·áµÇ°Å³ª È£Ãâ ½º·¹µå°¡ ÀÎÅÍ·´Æ®µÉ ¶§±îÁö È£ÃâÀÚ¸¦ Â÷´ÜÇÕ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ´õ¿í °áÁ¤ÀûÀÎ ¹æ¹ýÀ¸·Î À§ÀÇ ½º´ÏÆêÀ» ÀçÀÛ¼ºÇØ º¾´Ï´Ù.
TrivialJob job = new TrivialJob(); System.out.println("About to schedule a job"); job.schedule(); job.join(); if (job.getResult().isOk()) System.out.println("Job completed with success"); else System.out.println("Job did not complete successfully");join() È£ÃâÀÌ ÀÎÅÍ·´Æ®µÇ¾î ÀÖÁö ¾Ê´Â´Ù°í °¡Á¤Çϸé ÀÌ ¸Þ¼Òµå´Â ´ÙÀ½ °á°ú¸¦ ¸®ÅÏÇÕ´Ï´Ù.
About to schedule a job This is a job Job completed with success
¹°·Ð ±×¿Í °°ÀÌ ¼öÇàÇÏ¸é µ¿½Ã¼ºÀ» ¾òÁö ¸øÇϹǷΠÀϹÝÀûÀ¸·Î ÀÛ¾÷À» ½ºÄÉÁÙÇÑ ÈÄ Áï½Ã °áÇÕÇÏ´Â °ÍÀº À¯¿ëÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ °æ¿ì È£Ãâ ½º·¹µå¿¡¼ Á÷Á¢ ÀÛ¾÷ÀÇ run ¸Þ¼Òµå·ÎºÎÅÍ ÀÛ¾÷À» ¼öÇàÇÒ ¼öµµ ÀÖ½À´Ï´Ù. °áÇÕ »ç¿ëÀÌ À¯¿ëÇÑ ÀϺΠ¿¹Á¦´Â ³ªÁß¿¡ »ìÆì º¸°Ú½À´Ï´Ù.
¸¶Áö¸· ½º´ÏÆêÀº ÀÛ¾÷ °á°úµµ »ç¿ëÇÕ´Ï´Ù. °á°ú´Â ÀÛ¾÷ÀÇ run() ¸Þ¼Òµå·ÎºÎÅÍ ¸®ÅϵǴ IStatus ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. ÀÌ °á°ú¸¦ »ç¿ëÇÏ¿© ÀÛ¾÷ÀÇ run ¸Þ¼Òµå¿¡¼ ÇÊ¿äÇÑ ¸ðµç ¿ÀºêÁ§Æ®¸¦ ´Ù½Ã Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. °á°ú´Â ½ÇÆÐ(½É°¢µµ IStatus.ERROR¿Í ÇÔ²² IStatus¸¦ ¸®ÅÏÇÏ¿©) ¶Ç´Â Ãë¼Ò(IStatus.CANCEL)¸¦ Ç¥½ÃÇÏ´Â µ¥ »ç¿ëµÉ ¼öµµ ÀÖ½À´Ï´Ù.
ÀÛ¾÷À» ½ºÄÉÁÙÇϰí ÀÛ¾÷ÀÌ ¿Ï·áµÉ ¶§±îÁö ´ë±âÇÏ´Â ¹æ¹ýÀ» »ìÆì º¸¾ÒÁö¸¸ »ç¿ëÀÚ°¡ ÀÛ¾÷À» ¼öÇàÇϱâ À§ÇØ ÇÊ¿äÇÑ »çÇ×ÀÌ À̿ܿ¡µµ ÀÖ½À´Ï´Ù. ÀÛ¾÷À» ½ºÄÉÁÙÇÑ ÈÄ ÀÌ ÀÛ¾÷ÀÌ ´õ ÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀº °ÍÀ¸·Î °áÁ¤ÇÑ °æ¿ì cancel() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ÀÛ¾÷À» ÁßÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. Ãë¼ÒÇÒ ¶§ ÀÛ¾÷ÀÌ ½ÇÇàÀ» ¾ÆÁ÷ ½ÃÀÛÇÏÁö ¾ÊÀº °æ¿ì ÀÛ¾÷Àº Áï½Ã Æó±âµÇ°í ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ÇÑÆí, ÀÛ¾÷ÀÌ ÀÌ¹Ì ½ÇÇàÀ» ½ÃÀÛÇÑ °æ¿ì ÀÛ¾÷ÀÌ Ãë¼Ò¿¡ ÀÀ´äÇÒ °ÍÀÎÁö ¿©ºÎ´Â ÇØ´ç ÀÛ¾÷¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ÀÛ¾÷À» Ãë¼ÒÇÏ·Á´Â °æ¿ì join() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ´ë±âÇÏ´Â °ÍÀÌ Æí¸®ÇÕ´Ï´Ù. ´ÙÀ½Àº ÀÛ¾÷À» Ãë¼ÒÇÏ°í °è¼Ó ÁøÇàÇϱâ Àü¿¡ ÀÛ¾÷ÀÌ ¿Ï·áµÉ ¶§±îÁö ´ë±âÇÏ´Â °øÅëÀûÀÎ ¹æ¹ýÀÔ´Ï´Ù.
if (!job.cancel()) job.join();
Ãë¼Ò°¡ Áï½Ã Àû¿ëµÇÁö ¾ÊÀ¸¸é cancel()Àº false¸¦ ¸®ÅÏÇϰí È£ÃâÀÚ´Â join()À» »ç¿ëÇÏ¿© ÀÛ¾÷ÀÌ ¿Ã¹Ù¸£°Ô Ãë¼ÒµÉ ¶§±îÁö ´ë±âÇÕ´Ï´Ù.
Ãë¼Òº¸´Ù ¾àÇÑ ¹æ¹ýÀº sleep() ¸Þ¼ÒµåÀÔ´Ï´Ù. ÀÛ¾÷ÀÌ ¾ÆÁ÷ ½ÇÇàÀ» ½ÃÀÛÇÏÁö ¾ÊÀº °æ¿ì ÀÌ ¸Þ¼Òµå´Â ÀÛ¾÷À» ¹«±âÇÑ º¸·ùÇÕ´Ï´Ù. ÀÛ¾÷Àº °è¼ÓÇØ¼ Ç÷§Æû¿¡¼ ±â¾ïµÇ°í wakeUp() È£ÃâÀ» ÅëÇØ ÀÛ¾÷ÀÌ ½ÇÇàµÉ ´ë±â ´ë±â¿¿¡ Ãß°¡µË´Ï´Ù.
ÀÛ¾÷Àº Áö¼Ó½Ã°£ µ¿¾È ¿©·¯ »óŸ¦ °Þ½À´Ï´Ù. ÀÛ¾÷Àº cancel() ¹× sleep()°ú °°Àº API¸¦ ÅëÇØ Á¶ÀÛµÉ ¼öµµ ÀÖ°í Ç÷§ÆûÀÌ ½ÇÇàµÇ¾î ÀÛ¾÷À» ¿Ï·áÇÒ ¶§ »óŰ¡ º¯°æµÇ±âµµ ÇÕ´Ï´Ù. ÀÛ¾÷ »óÅ´ ´ÙÀ½°ú °°ÀÌ ÁøÇàµÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÛ¾÷ÀÌ ÇöÀç WAITING »óÅÂÀÏ °æ¿ì¿¡¸¸ ÀϽà Á¤Áö »óÅ·ΠµÑ ¼ö ÀÖ½À´Ï´Ù. ÀϽà Á¤Áö ÁßÀÎ ÀÛ¾÷À» ½ÇÇàÇÏ¸é ´Ù½Ã WAITING »óÅ·Π³õÀÔ´Ï´Ù. ÀÛ¾÷À» Ãë¼ÒÇϸé NONE »óÅ·Π¸®Åϵ˴ϴÙ.
Ç÷¯±×ÀÎÀÌ Æ¯Á¤ ÀÛ¾÷ »óŸ¦ ¾Ë°í ÀÖ¾î¾ß ÇÒ °æ¿ì ¶óÀÌÇÁ »çÀÌŬ Áß¿¡ ÀÛ¾÷ÀÌ À̵¿ÇÏ¸é¼ ÅëÁöµÇ´Â ÀÛ¾÷ º¯°æ ¸®½º³Ê¸¦ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ÁøÇà »óȲÀ» Ç¥½ÃÇϰųª ´Þ¸® ÀÛ¾÷¿¡ ´ëÇØ º¸°íÇÏ´Â °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù.
Job ¸Þ¼Òµå addJobChangeListener´Â ƯÁ¤ ÀÛ¾÷¿¡ ´ëÇØ ¸®½º³Ê¸¦ µî·ÏÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. IJobChangeListener´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¾÷¿¡¼ »óÅ º¯°æ¿¡ ´ëÇØ ÀÀ´äÇÏ´Â ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÕ´Ï´Ù.
ÀÌ ¸ðµç °æ¿ì¿¡ ¸®½º³Ê´Â »óÅ º¯°æ ¹× ¿Ï·á(¼öÇàµÈ °æ¿ì)¿¡ ´ëÇÑ »óŸ¦ °æÇèÇÏ´Â ÀÛ¾÷À» ÁöÁ¤ÇÏ´Â IJobChangeEvent¿Í ÇÔ²² Á¦°øµË´Ï´Ù.
Âü°í: ¶ÇÇÑ ÀÛ¾÷Àº ÀÛ¾÷ÀÇ (ºñ±³Àû) ÇöÀç »óŸ¦ ¾ò±â À§ÇÑ getState() ¸Þ¼Òµå¸¦ Á¤ÀÇÇÕ´Ï´Ù. ±×·¯³ª ÀÛ¾÷ÀÌ ´Ù¸¥ ½º·¹µå¿¡¼ ½ÇÇàµÇ¾î È£ÃâÀÌ ¸®Å쵃 ¶§±îÁö ´Ù½Ã »óŸ¦ º¯°æÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ °á°ú¸¦ Ç×»ó ½Å·ÚÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ÀÛ¾÷ º¯°æ ¸®½º³Ê´Â ÀÛ¾÷¿¡¼ »óÅ º¯°æÀ» ¹ß°ßÇϱâ À§ÇÑ ±ÇÀåµÇ´Â ¸ÞÄ¿´ÏÁòÀÔ´Ï´Ù.
IJobManager´Â ½Ã½ºÅÛÀÇ ¸ðµç ÀÛ¾÷¿¡ ´ëÇÑ ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÕ´Ï´Ù. ÁøÇà »óȲÀ» Ç¥½ÃÇϰųª ´Þ¸® ÀÛ¾÷ ÇϺΠ±¸Á¶¸¦ »ç¿ëÇÏ´Â Ç÷¯±×ÀÎÀº IJobManager¸¦ »ç¿ëÇÏ¿© ½Ã½ºÅÛ¿¡ ÀÖ´Â ¸ðµç ÀÛ¾÷ÀÇ ÀϽÃÁß´Ü, ½ÇÇà ÁßÀÎ ÀÛ¾÷ ÀÛ¾÷»çÇ× ¶Ç´Â ƯÁ¤ ÀÛ¾÷¿¡ ´ëÇÑ ÁøÇà Çǵå¹é ¼ö½Å°ú °°Àº Ÿ½ºÅ©¸¦ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷§Æû API¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ Ç÷§ÆûÀÇ ÀÛ¾÷ °ü¸®ÀÚ¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
IJobManager jobMan = Platform.getJobManager();
½Ã½ºÅÛÀÇ ¸ðµç ÀÛ¾÷ »óÅ¿¡ °ü·ÃµÈ Ç÷¯±×ÀÎÀº ´Ù¼öÀÇ °³º° ÀÛ¾÷¿¡ ¸®½º³Ê¸¦ µî·ÏÇÏ´Â ´ë½Å ÀÛ¾÷ °ü¸®ÀÚ¿¡ ´ÜÀÏ ÀÛ¾÷ º¯°æ ¸®½º³Ê¸¦ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù.
Ç÷¯±×ÀÎÀÌ ´ÜÀÏ ´ÜÀ§·Î¼ °ü·Ã ÀÛ¾÷ ±×·ìÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ ½¬¿î °æ¿ì°¡ Á¾Á¾ ÀÖ½À´Ï´Ù. ÀÛ¾÷ Á¦Ç°±ºÀ» »ç¿ëÇÏ¿© À̸¦ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÛ¾÷Àº ´ÙÀ½°ú °°ÀÌ belongsTo ¸Þ¼Òµå¸¦ ´ëüÇÏ¿© ƯÁ¤ Á¦Ç°±º¿¡ ¼ÓÇÔÀ» ¼±¾ðÇÕ´Ï´Ù.
public static final String MY_FAMILY = "myJobFamily"; ... class FamilyJob extends Job { ... public boolean belongsTo(Object family) { return family == MY_FAMILY; } }IJobManager ÇÁ·ÎÅäÄÝÀº ´ÙÀ½°ú °°ÀÌ Á¦Ç°±º¿¡¼ ¸ðµç ÀÛ¾÷À» Ãë¼Ò, °áÇÕ, ÀϽà Á¤Áö ¶Ç´Â ã±â¸¦ ¼öÇàÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
IJobManager jobMan = Platform.getJobManager(); jobMan.cancel(MY_FAMILY); jobMan.join(MY_FAMILY, null);
ÀÛ¾÷ Á¦Ç°±ºÀº ÀÓÀÇÀÇ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ¿© Ç¥½ÃµÇ¹Ç·Î °ü·Ã »óŸ¦ ÇØ´ç ÀÛ¾÷ Á¦Ç°±º ÀÚü¿¡ ÀúÀåÇÒ ¼ö ÀÖ°í ÀÛ¾÷Àº Çʿ信 µû¶ó Á¦Ç°±º ¿ÀºêÁ§Æ®¸¦ µ¿ÀûÀ¸·Î ºôµåÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ Ç÷¯±×ÀÎÀÌ ÀÛ¼ºÇÑ Á¦Ç°±º°úÀÇ ¿ì¿¬ÇÑ »óÈ£ÀÛ¿ëÀ» ¹æÁöÇÏ·Á¸é °íÀ¯ÇÑ Á¦Ç°±º ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù.
¶ÇÇÑ Á¦Ç°±ºÀº ÀÛ¾÷ ±×·ìÀ» ã´Â Æí¸®ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ¸Þ¼Òµå IJobManager.find(Object family)´Â ÁöÁ¤µÈ ½Ã°£¿¡ ½ÇÇà ÁßÀÌ°í ´ë±â ÁßÀ̸ç ÀϽà Á¤Áö ÁßÀÎ ¸ðµç ÀÛ¾÷¿¡ ´ëÇÑ ÀνºÅϽº¸¦ ã´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.