启动线程并使用lambdas调用join

时间:2016-07-06 13:02:25

标签: java multithreading lambda

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的列表,我想依次开始。一旦完成任务,下一个接管指挥棒,如果你喜欢并完成任务。如何按顺序迭代列表并使用Java lambda body启动线程,以便InterruptedException调用join()处理class="pull-left"

1 个答案:

答案 0 :(得分:1)

在开始下一个线程之前等待每个线程完成是没有意义的。您也可以在一个线程中完成所有工作。

不要使用Thread个对象(或Foobar extends Thread个对象)来表示数据模型中的内容。这违反了单一责任原则。使用线程来工作,或使用线程等待异步事件。使用模型中的其他对象。