比如我创建一个excel对象,因为excel有问题,导致创建语句始终无响应.这个时候有没有一种机制能让我的创建语句在30秒还未返回的情况下,转到处理语句去?

解决方案 »

  1.   

    获取时间:
    时获取当前时间:
    long befor = System.currentTimeMills();
    long delay = ??? //自己定义规格超时时间;如30秒那么它就是(30*1000=30000)
    long after = befor + delay;
    boolean isXXX = false;
    while(System.currentTimeMills() <= after) //如果没有超时,就继续
    {
        //do more work..............
        if (System.currentTimeMills = after){
            isXX = true; 
        } 
        else
            isXXX =false;
        
    }
    if (isXXX) {
       return ; //返回,后面的不再执行
    }else
       //执行另外的处理语句不管是成功或者失败都回返回的,在返回方法中获取当前时间:
    long after = System.currentTimeMills();long delay = befor - after ;//超时 如果超时就让线程进行等待wait或者不活动join
      

  2.   

    //do more work..............
    在这里程序会停住啊?后面的
    if (System.currentTimeMills = after)
    判断是永远到不了的
      

  3.   

    lllllllllluoyi(罗毅) 是对地,System.currentTimeMills()每次都会取不同的时间,OK?这个问题好像在哪本书看过,就是想不起来了
      

  4.   

    俺也遇到相似的问题,而且,即使用线程,也没有安全的办法吧?!:强制终止线程是不安全的。
    另外,Timer会自动另开一个线程的。不需要用System.currentTimeMills()之类的东西
      

  5.   

    if (System.currentTimeMills = after)
    判断是永远到不了的!!
    换成if (System.currentTimeMills >= after)不就ok了
      

  6.   

    同1个线成当然会卡住咯。。可以多线的话做个内部class
    public class test extends Thread
    {
       private Boolean running = new Boolean(true);
       public void run()
       {
           synchronized(running){running = new Boolean(true);)}
           //do your code here
          synchronized(running){running = new Boolean(false);)}
       }   public boolean getRunning()
       {
          synchronized(running){
          boolean b = running.boolValue();}
       }   public void stopRunning(){}
       class Timer extends Thread
       {
          public void run()
          {
             try{sleep(30000);if(getRunning()) stopRunning();}catch(Exception e){}
          }
       }
    }看了无法创建的原因了。要不只能在stopRunning()里面强行stop线成 这个做法就不是很好了
      

  7.   

    if (System.currentTimeMills = after){
            isXX = true; 
        } 
        else
            isXXX =false;
    时间运算也许有差异这处判断可能不行,照wthwebbe(honghong)说的做吧。