µ¿½Ã¼º ÇϺα¸Á¶

º¹ÇÕ ½Ã½ºÅÛ¿¡ ´ëÇÑ ÁÖ¿ä ¹®Á¦ Áß Çϳª´Â Ÿ½ºÅ©°¡ ¼öÇà ÁßÀÎ µ¿¾È ½Å¼ÓÈ÷ ÀÀ´äÇÒ ¼ö ÀÖ´Â »óÅ·Π³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ¹®Á¦´Â È®Àå °¡´ÉÇÑ ½Ã½ºÅÛ¿¡¼­ ÇÔ²² ½ÇÇàµÇµµ·Ï ÁöÁ¤µÇÁö ¾ÊÀº ±¸¼º¿ä¼Ò°¡ µ¿ÀÏÇÑ ÀÚ¿øÀ» °øÀ¯ÇÒ ¶§ ÈξÀ ´õ Å« ¹®Á¦°¡ µË´Ï´Ù. org.eclipse.core.runtime.jobs ÆÐŰÁö´Â ÇöÀç ½ÇÇà ÁßÀÎ Á¶ÀÛÀ» ½ºÄÉÁÙ, ½ÇÇà ¹× °ü¸®ÇÏ´Â ÇϺα¸Á¶¸¦ Á¦°øÇÏ¿© ÀÌ ¹®Á¦¸¦ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇϺα¸Á¶´Â ºñµ¿±â·Î ½ÇÇàµÉ ¼ö ÀÖ´Â ÀÛ¾÷ ´ÜÀ§¸¦ Ç¥½ÃÇÏ´Â ÀÛ¾÷ÀÇ »ç¿ëÀ» ±â¹ÝÀ¸·Î ÇÕ´Ï´Ù.

ÀÛ¾÷

ÀÛ¾÷ Ŭ·¡½º´Â ´Ù¸¥ ÀÛ¾÷°ú µ¿½Ã¿¡ ½ÇÇà ÁßÀÎ ºñµ¿±â ÀÛ¾÷ ´ÜÀ§¸¦ Ç¥½ÃÇÕ´Ï´Ù. Ÿ½ºÅ©¸¦ ¼öÇàÇϱâ À§ÇØ Ç÷¯±×ÀÎÀº ÀÛ¾÷À» ÀÛ¼ºÇÑ ÈÄ À̸¦ ½ºÄÉÁÙÇÕ´Ï´Ù. ÀÛ¾÷ÀÌ ½ºÄÉÁٵǸé Ç÷§Æû¿¡¼­ °ü¸®ÇÏ´Â ÀÛ¾÷ ´ë±â¿­¿¡ Ãß°¡µË´Ï´Ù. Ç÷§ÆûÀº ¹è°æ ½ºÄÉÁÙ¸µ ½º·¹µå¸¦ »ç¿ëÇÏ¿© º¸·ù ÁßÀÎ ¸ðµç ÀÛ¾÷À» °ü¸®ÇÕ´Ï´Ù. ½ÇÇà ÁßÀÎ ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é ÀÌ ÀÛ¾÷Àº ´ë±â¿­¿¡¼­ Á¦°ÅµÇ°í Ç÷§ÆûÀÌ ´ÙÀ½¿¡ ½ÇÇàÇÒ ÀÛ¾÷À» °áÁ¤ÇÕ´Ï´Ù. ÀÛ¾÷ÀÌ È°¼º »óŰ¡ µÇ¸é Ç÷§ÆûÀº run() ¸Þ¼Òµå¸¦ È£ÃâÇÕ´Ï´Ù. ÀÛ¾÷Àº ´ÙÀ½°ú °°ÀÌ ´Ü¼ø ¿¹Á¦¸¦ »ç¿ëÇÏ¿© °¡Àå Àß ¼³¸íµË´Ï´Ù.
   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)´Â ÁöÁ¤µÈ ½Ã°£¿¡ ½ÇÇà ÁßÀÌ°í ´ë±â ÁßÀ̸ç ÀϽà Á¤Áö ÁßÀÎ ¸ðµç ÀÛ¾÷¿¡ ´ëÇÑ ÀνºÅϽº¸¦ ã´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

¹ýÀû ÁÖÀÇ»çÇ×