例如用URL中的方法openStream()来打开一个网页的输入流, 我想规定在一定时间内打不开该流就终止打开, 有什么方法可以调用呢?

解决方案 »

  1.   

    那你最好的办法还是用NIO来处理
      

  2.   

    要不也可以用setSoTimeout(int timeout)
      

  3.   

    setSoTimeout没有用,他要度量的是Transaction Timeout,而不是TCP Timeout,启动一个线程来作,然后他的manager wait(5000L)5秒,然后查询那个线程工作完成没有,没有完成就中止,如果线程提前完成任务,要notify他的manager,这样就可以完成任务
      

  4.   

    lbfhappy(千里冰封), 好象Socket里面的方法setSoTimeout(int timeout)和URLConnection里面的方法setConnectTimeout(int timeout)都是在通信连接时才能用, 而我只想打开某个网页的流好象不能调用这些方法, 不然会产生例外UnknownServiceException; 另外, 不知道你所说的用NIO如何处理~
    lesstif(品位人生), 我对java了解得比较少, 不知道你说的manager是如果使用, 另外, 我强行调用线程的stop(), 但却不能够正常地终止该线程, 不知道还有什么办法可以强行终止一个线程的~~
      

  5.   

    你也可以起一个线程,这个线程里面倒计时,到了此定的时间如果你还没有连接上,就可以在线程里对你等待连接这个线程进行操作了,这是JAVA多线程的优势,一个线程卡死不会影响别的线程
      

  6.   

    lbfhappy(千里冰封): 我现在也是采用这种方法来做的, 但是考虑到它有弊端, 
    首先, 为每个线程增加一个计时的线程会给CPU增加很大的负担; 另外, 线程太多容易产生死锁, 我对死锁处理也不太在行; 最后, 我用计时的线程调用stop()方法来终止等待连接的线程时, 它并没能正常终止, stop()方法是不建议采用的, 不知道还有什么好方法可以强行终止线程的, 很多人建议用while(stop)循环来编写线程, stop为false的时候线程就终止了, 但是这样却不能在打开流的等待过程中就终止该线程. 
    所以我觉得最好还是有方法可以设置打开流的最长等待时间, 或设置线程执行的最长时间.不知各位高手有什么建议~~
      

  7.   

    openStream()本身就应该有这样的处理机制,毕竟这种事不可能不考虑到