由于和另一个程序需要通信 所以我在java端启动若干线程用于不同的通信工作,但是在正式服务器上使用时偶尔会出现 out of memory: unable to create new native thread的异常, 因为我每个线程都会放到hashtable里用于管理 异常出现后我打印了hashtable里的线程 发现线程个数并不多 甚至有时只有一个的时候 也会出现这个异常 按照网上的资料 增减jvm的参数 也不起作用 真是郁闷 所以来请教各位朋友 望指点 小弟先谢过开发的时候 我启动1000多的线程 都没有出现过这种情况 无了耐了

解决方案 »

  1.   

    tomcat内存溢出可以修改一下tomcat的内存设置参数
      

  2.   

    顶顶  期待高手指点 
    之所以会有这样的问题 主要是项目需要和其他程序接口通信 底层是socket 所以在java端启动了Thread实时监听并处理数据 而且每一个客户端要的数据不同 所以每个用户打开这个页面都会启动线程为他服务
    不知道这样的需求 有没有可以替代thread的方法 一直找不到合适的解决方案 所以采用了thread负责通信 感觉web端启动thread是不安全的 但是没有办法 请高手赐教 
      

  3.   


    hashtable 一直不释放 用来管理线程 只是线程用完就销毁了 出异常的时候hashtable里仅有一个线程在工作 就不让我创建了
      

  4.   

    根据你提供的错误信息,应该是你创建的线程数量过多,不知道你的线程为什么需要hashtable来管理,如果说缓存,公用的话,应该用线程池可以解决
      

  5.   


    我用hashtable管理主要是想 创建线程的时候 我给他起个名字 当用户关闭这个页面 我就去结束这个线程 就根据这个线程的名字去hashtable中找到 然后修改这个线程的while(flag)为false 在然后从hashtable中将它删除掉
    所以用hashtable主要是想根据线程名获取这个线程对象