Appearance
16_Join&Fork
本文主要介绍了线程的join和fork方法。
join方法
- join方法是Thread类的一个方法,用于等待线程结束。
- join方法的底层是通过wait方法实现的。
fork方法
- fork方法是ForkJoinPool类的一个方法,用于将任务拆分成多个子任务并行执行。
- fork方法的底层是通过ForkJoinTask类实现的。
join和fork配合的使用示例
java
public class JoinAndFork {
public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<Integer> task = new ForkJoinTask<Integer>() {
@Override
public Integer getRawResult() {
return null;
}
@Override
protected void setRawResult(Integer value) {
}
@Override
protected boolean exec() {
if (ThreadLocalRandom.current().nextInt() % 2 == 0) {
System.out.println(Thread.currentThread().getName() + " is running.");
return true;
} else {
ForkJoinTask<Integer> left = new ForkJoinTask<Integer>() {
@Override
public Integer getRawResult() {
return null;
}
@Override
protected void setRawResult(Integer value) {
}
@Override
protected boolean exec() {
System.out.println(Thread.currentThread().getName() + " is running.");
return true;
}
};
ForkJoinTask<Integer> right = new ForkJoinTask<Integer>() {
@Override
public Integer getRawResult() {
return null;
}
@Override
protected void setRawResult(Integer value) {
}
@Override
protected boolean exec() {
System.out.println(Thread.currentThread().getName() + " is running.");
return true;
}
};
left.fork();
right.fork();
left.join();
right.join();
return true;
}
}
};
forkJoinPool.submit(task);
}
}