2014-04-21 2 views
-2

현재 같은 방법으로 여러 메서드를 동시에 실행하려고합니다. 지금 당장은 한 번에 하나씩 만하고 나서 모든 것을 반복하면 자고 있습니다. 메서드를 통해 동시에 배열의 모든 값을 처리해야합니다. 다음은 현재 코드입니다.Array의 모든 값을 한 번에 실행하는 방법

public static void checkTimer(TS3Api api) { 
    for (String keys : admins) { 
     //What I need: Check Groups for all values in string AT THE SAME TIME 
      checkGroup(api, keys); 
    } 
      try { 
       //Sleep for 10 second 
       Thread.sleep(10000); 
      } catch (InterruptedException e) { 
       // Do nothing 
      } 
    } 
+1

동시에 실행하려면 각 키마다 하나의 스레드를 만들어 동시에 실행해야합니다. 'checkGroup' 메쏘드가 얼마나 오랫동안 실행 되느냐에 따라, 여전히 같은 시간에 있지 않을 수도 있습니다. –

+0

@AleksG 주석에'checkGroup'을 추가하면 스레드로부터 안전해야합니다. – m0skit0

답변

0

Thread.sleep (10000)은 현재 스레드를 10 초 동안 대기 상태로 만듭니다. 이것이 기본 스레드입니다. 기본 스레드의 스레드를 분할하지 않았으므로 작성한 스레드가 작동합니다.

는 분할 오프 스레드의 몇 가지 예는 있습니다 자바 문서 http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

를 통해 살펴 보자. 이렇게하면 솔루션으로 나아갈 수 있습니다. 그러나,

admins.parallelStream().forEach(keys -> checkGroup(api, keys)); 
가 병렬로 할 것 항목의 수는 시스템에 의존

:

0

자바 8에서 당신은 뭔가를 쓸 수 있습니다. 어떤 방법을 취하더라도 적어도 시스템에 프로세서 수가 많은 경우가 아니면 admins의 항목이있는 경우가 아니면 병렬로 모두 처리 할 수는 없습니다.

관련 문제