|  |  | @ -1,5 +1,6 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | package engine.job; |  |  |  | package engine.job; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import engine.server.world.WorldServer; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.pmw.tinylog.Logger; |  |  |  | import org.pmw.tinylog.Logger; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.TimeUnit; |  |  |  | import java.util.concurrent.TimeUnit; | 
			
		
	
	
		
		
			
				
					|  |  | @ -9,6 +10,8 @@ public class JobThread implements Runnable { | 
			
		
	
		
		
			
				
					
					|  |  |  |     private final AbstractJob currentJob; |  |  |  |     private final AbstractJob currentJob; | 
			
		
	
		
		
			
				
					
					|  |  |  |     private final ReentrantLock lock = new ReentrantLock(); |  |  |  |     private final ReentrantLock lock = new ReentrantLock(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     private static Long nextThreadPrint; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public JobThread(AbstractJob job){ |  |  |  |     public JobThread(AbstractJob job){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.currentJob = job; |  |  |  |         this.currentJob = job; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
	
		
		
			
				
					|  |  | @ -37,5 +40,35 @@ public class JobThread implements Runnable { | 
			
		
	
		
		
			
				
					
					|  |  |  |         Thread thread = new Thread(jobThread); |  |  |  |         Thread thread = new Thread(jobThread); | 
			
		
	
		
		
			
				
					
					|  |  |  |         thread.setName("JOB THREAD: " + job.getWorkerID()); |  |  |  |         thread.setName("JOB THREAD: " + job.getWorkerID()); | 
			
		
	
		
		
			
				
					
					|  |  |  |         thread.start(); |  |  |  |         thread.start(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |        if(JobThread.nextThreadPrint == null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |            JobThread.nextThreadPrint = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |        }else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |            if(JobThread.nextThreadPrint < System.currentTimeMillis()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                JobThread.tryPrintThreads(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                JobThread.nextThreadPrint = System.currentTimeMillis() + 10000L; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |            } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |        } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public static void tryPrintThreads(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         ThreadGroup rootGroup = Thread.currentThread().getThreadGroup(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         while (rootGroup.getParent() != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             rootGroup = rootGroup.getParent(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Estimate the number of threads
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int activeThreads = rootGroup.activeCount(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Create an array to hold the threads
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Thread[] threads = new Thread[activeThreads]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Get the active threads
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         rootGroup.enumerate(threads, true); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int availableThreads = Runtime.getRuntime().availableProcessors(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Print the count
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Logger.info("Total threads in application: " + threads.length + " / " + availableThreads); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |