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