2014-06-19 4 views
0

나는 많은 계산을해야한다. 모두 병렬로 실행할 수 있습니다 ... RAM의 한계가없는 경우. :/병렬 스레드 수 제어

그 때문에 병렬로 작동하는 스레드의 수를 제어하고 싶습니다. 이 곳없는 멀티 스레딩이있는 것처럼 잘 작동 1

List<Thread> threadList = new ArrayList<Thread>();    
threadList.add(new Thread(new Runnable() {    
    @Override 
    public void run() { 
    .... 
    } 
}));    
threadList.get(threadList.size()-1).start();    
if(threadList.size() >= 5){     
    threadList.remove(0).join();     
} 

:

나는 다음과 같은 코드를 썼습니다. 그러나 내가 2를 허용하면 그것은 정말로 미쳤고 RAM은 채워지고있다.

내가 잘못 했나요?

답변

3

자신 만의 스레드 목록을 만들지 마십시오. 이것을 수행하는 기존의 방법과 일반적인 방법을 사용하십시오.

적절한 방법 중 하나는 ThreadPoolExecutor를 사용하는 것입니다. 이것을 확인하십시오. MultiThreading Vs ThreadPoolExecutor

또한 병렬/최대로 사용되는 스레드 수를 제한 할 수있는 실행 프로그램을 사용해야합니다. 예 :

ExecutorService executor = Executors.newFixedThreadPool(10); 
executor.submit(yourfirstthread); 
executor.submit(secondthread); 
// and so on..