问题一:定时器一般是以线程的方式运行的,如果能得到该线程的引用,就可以像查看Thread一样查看定时器的运行状态。如果可以修改源代码的话最好给他提供一个方法返回线程引用
问题二:TimerTask实现了接口Runnable,如果是以new Thread(TimerTask).start()方式启动的话就是做为一个单独的线程运行的,如果是timeTask.run()那就是方法调用,虽然占据一个线程,但这个线程就是主线程,并没有启动新的线程;既然实现线程,自然可以通过Thread的isAlive方法获取其live状态;一般情况下(不发生异常),定时器会一直运行,如果JVM停止,那么线程必然已经终止,如果JVM中只有这一个线程在运行,那么JVM不停,这个定时器就是一定在运行中,如果JVM中还有其他线程在运行,那么JVM不停,这个定时器有可能已经终止
PS:无论用不用线程池,线程启动方式只有两种(不包含main Thread):一种是继承Thread类,然后直接同构引用调用start方法,第二种就是继承Runnable接口,通过new Thread(new MyRunnableClass()).start()方式启动。无论如何,都会有一个Thread类的引用
补充:
一个tomcat只启动一个进程,而JVM的垃圾处理器也只有一个,所以在一个工程里运行System.gc也会影响到其他工程。
做一个进程自动检测不就好了
日志记录下 不行吗