3 changed files with 58 additions and 27 deletions
			
			
		| @ -0,0 +1,42 @@@@ -0,0 +1,42 @@ | ||||
| package engine.workthreads; | ||||
| 
 | ||||
| import engine.job.AbstractJob; | ||||
| import engine.job.JobThread; | ||||
| import engine.objects.PlayerCharacter; | ||||
| import org.pmw.tinylog.Logger; | ||||
| 
 | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.concurrent.locks.ReentrantLock; | ||||
| 
 | ||||
| public class ProcessUpdate implements Runnable{ | ||||
|     private final ReentrantLock lock = new ReentrantLock(); | ||||
|     private PlayerCharacter playerCharacter; | ||||
|     public ProcessUpdate(PlayerCharacter pc){ | ||||
|         this.playerCharacter = pc; | ||||
|     } | ||||
| 
 | ||||
|     public void run() { | ||||
|         try { | ||||
|             if (this.playerCharacter != null) { | ||||
|                 if (lock.tryLock(10, TimeUnit.SECONDS)) { // Timeout to prevent deadlock
 | ||||
|                     try { | ||||
|                         this.playerCharacter.update(true); | ||||
|                     } finally { | ||||
|                         lock.unlock(); | ||||
|                     } | ||||
|                 } else { | ||||
|                     Logger.warn("JobThread could not acquire lock in time, skipping job."); | ||||
|                 } | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|             Logger.error(e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void startUpdate(PlayerCharacter pc) { | ||||
|         ProcessUpdate updateThread = new ProcessUpdate(pc); | ||||
|         Thread thread = new Thread(updateThread); | ||||
|         thread.setName(pc.getObjectUUID() + " UPDATE"); | ||||
|         thread.start(); | ||||
|     } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue