@Override public void run() { try { while (running) { try { final Task task = tasks.take(); submitLogic( new Runnable() { @Override public void run() { task.execute(GameEngine.this); ObjectHandler.getInstance().process(); } }); } catch (InterruptedException e) { continue; } } } finally { logicService.shutdown(); taskService.shutdown(); workService.shutdown(); } }