43 lines
1.3 KiB
Java
43 lines
1.3 KiB
Java
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();
|
|
}
|
|
}
|