大家好,
最近被一个问题纠结。在使用xmencached的时候,使用system.exit(0)时候,有时候会抛出异常。请教如何去除这个异常?
异常:
Exception in thread "Thread-9" java.lang.IllegalStateException: Shutdown in progress at java.lang.ApplicationShutdownHooks.remove(ApplicationShutdownHooks.java:82) at java.lang.Runtime.removeShutdownHook(Runtime.java:239) at com.google.code.yanf4j.core.impl.AbstractController.stop(AbstractController.java:476) at net.rubyeye.xmemcached.XMemcachedClient.shutdown(XMemcachedClient.java:2482) at net.rubyeye.xmemcached.XMemcachedClient$1.run(XMemcachedClient.java:650) ... more
我的代码:
    MemcachedClient client = LowCardinalityMemcachedClientSingleton.getPrimaryClient();
    try {
        if(client.isShutdown() != true){
            client.shutdown();
        } else{
            logger.debug("client already shutdown");
        }
    } catch (IOException e) {
         logger.debug("Shutdown MemcachedClient fail", e);
    }    long startTime = System.currentTimeMillis();
    long total = 0;
    logger.debug("about to run wait loop");    while(client.isShutdown() == false || 
            total < 4000){
        long stopTime = System.currentTimeMillis();
         total = stopTime - startTime;
        if(total > 12000){
            logger.debug("breaking because waiting more than 12 seconds");
            break;          
        }
    }
    logger.debug("exiting");
    System.exit(0);
}
明明client已经被关闭了,为什么在system.exit(0)时候还会有异常呢?
非常感谢了。

解决方案 »

  1.   

    System.exit(0)表示正常退出,System.exit(1)表示异常退出。你程序肯定是抛异常了。在异常里用System.exit(1)。
      

  2.   

    是不是有时候发生异常的情况是shutdown没有完全完成导致的
    在exit之前等待足够时间来证明一下这种猜测好了
      

  3.   

    不好意思前几天出差。 多谢楼上各位,但是问题还是没解决。
    我尝试在system.exit()之前加log发现在system强制退出前client已经shutdown了,应该不是client未关闭而系统退出造成的。再看错误log发现是xmencache也就是那个client在shutdown的时候报的错。有办法去掉这个错误吗?什么抛出什么的都行。谢谢了。
      

  4.   

    看看shutdown的是不是主进程,如果关闭的是副进程,也会有这个问题那。
      

  5.   

    请问如何查看是不是主程序?怎么从Log里面除掉呢?如果不能修复,只要这个不在log里面显示也行哇,请教。