在我的Play应用程序中使用Daemon线程或Normal线程有什么影响? 我有一些Akka Scheduler和Quarts Scheduler。 这些在应用程序启动时正在启动。 我的应用程序在开发模式下运行,每当我对源代码进行更改时,它都会重新启动导致线程DeadLock的/自动重新加载应用程序。 停止这些线程的最佳方法是什么。
- 在这里使用Daemon Threads好吗?
- System.exit(0)在这里有用吗?
- 是否有其他方法可以停止正在调度中特定时间处于睡眠状态的这些正在运行/正在等待的线程?
我正在尝试做类似的事情:
@Override public void onStart(Application app) { Akka.system().scheduler().schedule(Duration.create(2000, TimeUnit.MILLISECONDS), Duration.create(60000, TimeUnit.MILLISECONDS), () -> { String url = Play.application().configuration().getString("localloadbalancer.ip"); url = url + "initCallOut"; Logger.info("Calling initcall from global.java::" + url); HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet(url); try { HttpResponse response = client.execute(request); int statusCode = response.getStatusLine().getStatusCode(); Logger.info("Status Code::" + statusCode); if (statusCode == 200) { //Do stuff here } else { //retry } } catch (IOException ex) { Logger.error("Error in Initcall::" + ex.getMessage()); } }, Akka.system().dispatcher()); // Quartz scheduler starting here try { QuartzScheduler.startScheduler(); } catch (Exception ex){ System.out.println("Scheduler Exception::"+ex.getMessage()); } }