/** * 执行该方法,线程池的状态立刻变成STOP状态,并试图停止所有正在执行的线程,不再处理还在池队列中等待的任务,当然,它会返回那些未执行的任务。 * 它试图终止线程的方法是通过调用Thread.interrupt()方法来实现的,但是大家知道,这种方法的作用有限, * 如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt()方法是无法中断当前的线程的。 * 所以,ShutdownNow()并不代表线程池就一定立即就能退出,它可能必须要等待所有正在执行的任务都执行完成了才能退出。 * 特殊的时候可以通过使用{@link InterruptibleJobRunner}来解决 */ public void stopWorking() { try { threadPoolExecutor.shutdownNow(); Thread.sleep(1000); threadPoolExecutor = initThreadPoolExecutor(); LOGGER.info("stop working succeed "); } catch (Throwable t) { LOGGER.error("stop working failed ", t); } }
/** * 执行该方法,线程池的状态立刻变成STOP状态,并试图停止所有正在执行的线程,不再处理还在池队列中等待的任务,当然,它会返回那些未执行的任务。 * 它试图终止线程的方法是通过调用Thread.interrupt()方法来实现的,但是大家知道,这种方法的作用有限, * 如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt()方法是无法中断当前的线程的。 * 所以,ShutdownNow()并不代表线程池就一定立即就能退出,它可能必须要等待所有正在执行的任务都执行完成了才能退出。 * 特殊的时候可以通过使用{@link InterruptibleJobRunner}来解决 */ public void stopWorking() { try { threadPoolExecutor.shutdownNow(); Thread.sleep(1000); threadPoolExecutor = initThreadPoolExecutor(); LOGGER.info("stop working succeed "); } catch (Throwable t) { LOGGER.error("stop working failed ", t); } }
public RunnerPool(final TaskTrackerAppContext appContext) { this.appContext = appContext; this.runningJobManager = new RunningJobManager(); threadPoolExecutor = initThreadPoolExecutor(); runnerFactory = appContext.getRunnerFactory(); if (runnerFactory == null) { runnerFactory = new DefaultRunnerFactory(appContext); } // 向事件中心注册事件, 改变工作线程大小 appContext.getEventCenter().subscribe( new EventSubscriber(appContext.getConfig().getIdentity(), new Observer() { @Override public void onObserved(EventInfo eventInfo) { setWorkThread(appContext.getConfig().getWorkThreads()); } }), EcTopic.WORK_THREAD_CHANGE); }
public RunnerPool(final TaskTrackerAppContext appContext) { this.appContext = appContext; this.runningJobManager = new RunningJobManager(); threadPoolExecutor = initThreadPoolExecutor(); runnerFactory = appContext.getRunnerFactory(); if (runnerFactory == null) { runnerFactory = new DefaultRunnerFactory(appContext); } // 向事件中心注册事件, 改变工作线程大小 appContext.getEventCenter().subscribe( new EventSubscriber(appContext.getConfig().getIdentity(), new Observer() { @Override public void onObserved(EventInfo eventInfo) { setWorkThread(appContext.getConfig().getWorkThreads()); } }), EcTopic.WORK_THREAD_CHANGE); }
/** * 执行该方法,线程池的状态立刻变成STOP状态,并试图停止所有正在执行的线程,不再处理还在池队列中等待的任务,当然,它会返回那些未执行的任务。 * 它试图终止线程的方法是通过调用Thread.interrupt()方法来实现的,但是大家知道,这种方法的作用有限, * 如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt()方法是无法中断当前的线程的。 * 所以,ShutdownNow()并不代表线程池就一定立即就能退出,它可能必须要等待所有正在执行的任务都执行完成了才能退出。 * 特殊的时候可以通过使用{@link InterruptibleJobRunner}来解决 */ public void stopWorking() { try { threadPoolExecutor.shutdownNow(); Thread.sleep(1000); threadPoolExecutor = initThreadPoolExecutor(); LOGGER.info("stop working succeed "); } catch (Throwable t) { LOGGER.error("stop working failed ", t); } }
public RunnerPool(final TaskTrackerAppContext appContext) { this.appContext = appContext; this.runningJobManager = new RunningJobManager(); threadPoolExecutor = initThreadPoolExecutor(); runnerFactory = appContext.getRunnerFactory(); if (runnerFactory == null) { runnerFactory = new DefaultRunnerFactory(appContext); } // 向事件中心注册事件, 改变工作线程大小 appContext.getEventCenter().subscribe( new EventSubscriber(appContext.getConfig().getIdentity(), new Observer() { @Override public void onObserved(EventInfo eventInfo) { setWorkThread(appContext.getConfig().getWorkThreads()); } }), EcTopic.WORK_THREAD_CHANGE); }