forked from MagicBane/Server
				
			
				 48 changed files with 92 additions and 49 deletions
			
			
		| @ -0,0 +1,40 @@@@ -0,0 +1,40 @@ | ||||
| package engine.job; | ||||
| 
 | ||||
| import org.pmw.tinylog.Logger; | ||||
| 
 | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.concurrent.locks.ReentrantLock; | ||||
| 
 | ||||
| public class JobThread implements Runnable { | ||||
|     private final AbstractJob currentJob; | ||||
|     private final ReentrantLock lock = new ReentrantLock(); | ||||
| 
 | ||||
|     public JobThread(AbstractJob job){ | ||||
|         this.currentJob = job; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void run() { | ||||
|         try { | ||||
|             if (this.currentJob != null) { | ||||
|                 if (lock.tryLock(5, TimeUnit.SECONDS)) { // Timeout to prevent deadlock
 | ||||
|                     try { | ||||
|                         this.currentJob.doJob(); | ||||
|                     } finally { | ||||
|                         lock.unlock(); | ||||
|                     } | ||||
|                 } else { | ||||
|                     Logger.warn("JobThread could not acquire lock in time, skipping job."); | ||||
|                 } | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|             Logger.error(e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void startJobThread(AbstractJob job){ | ||||
|         JobThread jobThread = new JobThread(job); | ||||
|         Thread thread = new Thread(jobThread); | ||||
|         thread.start(); | ||||
|     } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue