分支合并ForkJoin

JDK1.7之后出来的,并行执行任务,提高效率,大数据量!

ForkJoin特点:工作窃取

里面维护的都是双端队列

ForkJoin的操作

求和运算  代码示例:

测试代码:

在Java的Fork/Join框架中,`fork()`和`submit()`都是用于提交任务的方法,但它们有一些区别。

1. `fork()`方法是ForkJoinTask类中的方法,用于将任务分解为更小的子任务,并将子任务提交给ForkJoinPool进行执行。它是一种无返回值的任务提交方式,表示当前任务将被划分为更小的子任务并在ForkJoinPool中执行。`fork()`方法会立即返回,不等待子任务的执行结果。

2. `submit()`方法是ExecutorService接口中的方法,用于提交任务并返回一个表示任务执行结果的Future对象。它可以用于提交任何实现了Callable或Runnable接口的任务。`submit()`方法会返回一个Future对象,可以通过该对象获取任务的执行结果。

总的来说,`fork()`方法用于提交ForkJoinTask任务,并将任务划分为更小的子任务,不等待子任务的执行结果;而`submit()`方法用于提交任务并获取任务的执行结果,可以用于提交任何实现了Callable或Runnable接口的任务。

以下是使用`fork()`和`submit()`方法的示例代码:

```java
ForkJoinPool forkJoinPool = new ForkJoinPool();

MyTask task = new MyTask();
forkJoinPool.invoke(task);  // 使用fork()提交任务

Callable<Integer> callable = new MyCallable();
Future<Integer> future = forkJoinPool.submit(callable);  // 使用submit()提交任务并获取结果
int result = future.get();  // 获取任务的执行结果
```

在上面的示例中,首先创建了一个ForkJoinPool对象,然后使用`invoke()`方法提交了一个ForkJoinTask任务,并使用`submit()`方法提交了一个Callable任务。对于ForkJoinTask任务,它会使用`fork()`方法将任务划分为更小的子任务并在ForkJoinPool中执行;对于Callable任务,它会使用`submit()`方法提交任务并返回一个Future对象,然后可以通过Future对象的`get()`方法获取任务的执行结果。

在ForkJoin框架中,fork和submit方法都用于提交任务,但它们之间存在一些关键的区别。

fork方法会将一个任务拆分成多个子任务,并将这些子任务加入到ForkJoin线程池中等待执行。当一个子任务被执行时,它会将结果提交给父任务,父任务会继续执行并等待其他子任务的结果。因此,fork方法用于将一个任务拆分成多个子任务并行执行,并将结果合并。

而submit方法是将一个任务提交给ForkJoin线程池执行,但不关心任务的执行结果。当任务被提交后,它会被加入到一个队列中等待执行。当一个工作线程空闲时,它会从队列中窃取一个任务并执行。因此,submit方法适用于只需要异步执行一个任务的情况,而不需要关心任务的执行结果。

总结来说,fork和submit的主要区别在于:fork方法用于将一个任务拆分成多个子任务并行执行,并将结果合并;而submit方法是将一个任务提交给线程池异步执行,不关心任务的执行结果。

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学控制原理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值