我在项目中为了使用异步,就选择了多线程,刚开始是挺好的,但是运行了几天发现了问题,当访问量大的时候,会创建好多线程,每一个线程都在请求同一个服务,就会有线程处于阻塞状态,最后会导致系统资源耗尽,处于宕机状态。
这种问题该如何解决?或者是我想给每一个线程3秒钟的时间,3秒钟之后就让线程stop了。
求思路。

解决方案 »

  1.   

    用线程池吧。ExecutorService pool = Executors.Fixed.....(线程数);
    ....
    ....很容易用。跟数据库连接池道理一样。
      

  2.   

    线程池可以选择策略的
    ThreadPoolExecutor.AbortPolicy
    ThreadPoolExecutor.CallerRunsPolicy
    ThreadPoolExecutor.DiscardOldestPolicy
    ThreadPoolExecutor.DiscardPolicy
    就看你自己想怎么处理
      

  3.   

    我用的Timer设置了3秒钟,但是没有起到作用,线程还是继续执行,直到抛出了超时异常。
      

  4.   

    [Quote=引用 15 楼 liuyyuns 的回复:]
    我用的Timer设置了3秒钟,但是没有起到作用,线程还是继续执行,直到抛出了超时异常。
    那可能是你线程在请求服务 。 阻塞在哪里,然后超时后 抛出异常。这个时候 即使你用 interrupted 是不起作用的。直接stop也不是很好。stop方法是不安全的