ExecutorService service = Executors.newCachedThreadPool(); Future<Result> future = service.submit(new Callable<Result>() { @Override public Result call() { MMService mmService = new MMService(); return mmService.userManage(userData); } }); Result result = null; try { result = future.get(30, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } finally { service.shutdown(); }