2016-11-03 6 views
1

코드는 내가 200 개 다른 서버의 목록이 포함 serverArray라는 배열을for 루프에 대해 다중 스레드를 만들려면 어떻게해야합니까?

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
public class MonitoringItems { 

String servers = prop.getProperty("SERVERS"); 
String[] serverArray = servers.split("@!"); 

List<DartModel> data = new ArrayList<DartModel>(); 
for(String server:serverArray) {  

try { 

    conn = new ch.ethz.ssh2.Connection(server); 
    conn.connect(); 
    boolean isAuthenticated = conn 
      .authenticateWithPassword(username_array[j], 
        password_array[j]); 
    if (isAuthenticated == false) { 
     throw new IOException("Authentication failed."); 
    } 

스 니펫. 이 루프는 200 개의 다른 서버를 반복합니다. 어떻게하면 동시에 실행할 수있는 방법으로 각 서버에 대한 스레드를 만들 수 있습니까? 그것이 인쇄되는 순서는 큰 문제가 아닙니다. 각 스레드는 1 대의 서버를 실행해야하며 동일한 서버를 실행하면 안됩니다.

간단한 멀티 스레딩 자습서를 수행했지만 모든 스레드가 인쇄중인 것을 보여주기 위해 다른 ID로 동일한 것을 인쇄합니다.

+0

앞으로 각 파트를 랩핑하면 원하는 것을 얻을 수 있습니다. – Carcigenicate

+0

그리고 Thread factory ....와 같은 것을보세요. –

+0

@Carcigenicate는 제게 일반적인 예를 줄 수 있습니까? – Jesse

답변

1

자바 8에있는 경우, 당신은 멀티 스레드 루프를 달성하기 위해 스트림을 사용할 수 있습니다

serverArray.parallelStream().forEach(server -> { 
    try { 
     ... 
    }}); 

루프 내부에 감동 모든 스레드 안전 있는지 확인합니다. 병렬 스트림에 대한
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

더 많은 정보 : 람 바어 표현에 대해

Arrays.stream(serverArray).parallel()


더 많은 정보 :
Arrays 당신은 정적 컨버터를 사용할 수 Collections 작동 :
https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html

+0

내가해야 할 일에 유망 해 보인다. 좀 더 자세히 설명해 주시겠습니까? 그런 코드를 본 것은 처음입니다. – Jesse

+0

나는 무엇을 정교하게하는지 정말로 모른다. Lamba 표현식과 병렬 스트림에 대한 공식 문서에 대한 두 개의 링크를 추가했습니다. 희망이 도움이! 정확한 질문이 있으면 말해. –

관련 문제