Java Thread / Runnable停止

时间:2015-04-20 19:10:04

标签: java multithreading

我编写了一个多线程的客户端/服务器应用程序来处理多个连接。我有一个父类接受传入的连接,一个内部类接受接受的套接字并接收数据等。

我注意到虽然每个线程都在“完成”并且正在调用thread.join(),但是分配给进程的内存随着每个连接而增长,并且永远不会缩小。

我认为我现在不能分享很多代码,但我有类似的东西试图结束线程。我也很肯定跑步方法正在完成。 ThreadHandler是一个包含Thread及其Runnable的内部类。 IsRunning()完成后run()将返回true。

private static void cleanupThreads(ArrayList<ThreadHandler> threads){

    //find all of the non-running threads and join them

    for(int i = 0; i < threads.size(); i++){

        //get the Handler and check whether it's running
        ThreadHandler tmpThread = threads.get(i);
        Handler tmpHandler = tmpThread.getHandler();
        if(!tmpHandler.isRunning()){
            //time to die
            threads.remove(i);
            try{
                tmpThread.getThread().join();
                System.out.println("thread joined");
            }catch(InterruptedException e){

            }
        }
    }
}

有没有比预先声明~10个线程并将它们分配给Connections更好的选择?因此,调用System.gc()会减少内存负载,但这通常是不好的做法。

1 个答案:

答案 0 :(得分:1)

  

有没有比预先声明~10个线程并将它们分配给Connections更好的选择?

不,这通常是的想法,因为创建和销毁线程比重新使用它们要昂贵得多。这个想法被称为线程池,Java标准库已经为您实现了一个;查看java.util.concurrent.ThreadPoolExecutor的javadoc以及相关的类和接口。