2016-07-06 1 views
0
private List<Thread> pupils = new ArrayList<>(); 

public (int groupNo, Position pos) 
{ 
    this.groupNo = groupNo; 
    this.position = pos; 

    for (int i = 1; i < 10; i++) { 
     pupils.add(new Thread(new Pupil(i, groupNo, pos))); 
    } 
} 

@Override 
public void run() 
{ 
    pupils.forEach(t -> t.start()); 
    // Here I would like to use Java 8 features instead of Iterator to loop through list 
    // of threads and start a thread at once. Only when one is complete start the next 
    // in order. 
} 

나는 차례로 시작하고자하는 Threads리스트를 가지고 있습니다. 작업이 끝나면 다음 작업은 원하는 바톤 작업을 수행하고 작업을 수행합니다. 어떻게 순서대로 목록을 반복하고 join() 호출의 결과로 InterruptedException을 처리하는 자바 람다 본체로 스레드를 시작할 수 있습니까?스레드를 시작하고 람다를 사용하여 join을 호출합니다.

+0

두 번째 줄은 함수 선언으로 보이지만 이름이 없습니다. –

답변

1

각 스레드가 다음 스레드를 시작하기 전에 완료 될 때까지 기다리는 것은 의미가 없습니다. 하나의 스레드에서 모든 작업을 수행 할 수도 있습니다.

데이터 모델의 내용을 나타내려면 Thread 개체 (또는 Foobar extends Thread 개체)를 사용하지 마십시오. 이는 단일 책임 원칙을 위반하는 것입니다. 스레드를 사용하여 작업을 수행하거나 스레드를 사용하여 비동기 이벤트를 기다립니다. 모델의 다른 객체를 사용하십시오.

관련 문제