需求設置是個線程只有一個線程執行完畢後下一個線程纔會執行。
public class DataCollection {
//設置執行順序
public static final LinkedList<Control> CONTROLS = new LinkedList<>();
public static void main(String[] args) {
List<Thread> list = new ArrayList<>();
Arrays.asList("m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", "m10").stream().
map(DataCollection::creatThread).forEach(name -> {
name.start();
list.add(name);
});
list.forEach(n -> {
try {
// 線程等待,只有全部的線程執行完畢纔會執行下面的
n.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
//放置空指針的操作
Optional.of("所有的程序已經執行完畢").ifPresent(System.out::println);
}
private static Thread creatThread(String name) {
return new Thread(()->{
synchronized (CONTROLS){
while (CONTROLS.size() > 5){
try {
CONTROLS.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
CONTROLS.addLast(new Control());
}
try {
Optional.of("the work " + Thread.currentThread().getName() + "working....").ifPresent(System.out::println);
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (CONTROLS){
Optional.of("the work"+Thread.currentThread().getName()+"end").ifPresent(System.out::println);
CONTROLS.removeFirst();
CONTROLS.notifyAll();
}
},name);
}
private static class Control{
}
}