public synchronized void doWork(final WorkPackage workPackage) { int threads = 1; // Manager.get().getEngineSettings().getThreads(); if (currentStatus == StatusType.idle || pool != threads) { pool = threads; executor = createExecutor(); } if (workPackage.getWorkList().isEmpty()) { return; } setCurrentStatusAndNotifyListenerIfTypeChanged(StatusType.working); workRemaining += workPackage.getWorkList().size(); startWorkPackage(workPackage); }
private void startWorkPackage(final WorkPackage workPackage) { workPackage.start(); for (final Work work : workPackage.getWorkList()) { executor.execute( new Runnable() { @Override public void run() { try { work.executeWork(); } finally { workCompleted(work, workPackage); } } }); } }