java - 使用 Java RecursiveTasks 创建多个线程

标签 java multithreading fork-join

所以我试图熟悉java中的并发编程,所以我编写了以下代码

public class Test{
    public static void main(String[] args){
        ForkJoinPool pool = new ForkJoinPool();
        pool.invoke(new Agent());

    }
}

class thread extends RecursiveTask<Integer>{    

    thread(){
        System.out.println("Thread");
    }

    public Integer compute(){ 
        thread x = new thread();
        x.fork();
        return 0;
    }

}

据我所知,应该无限地打印“Thread”,但当我运行它时,它只打印“Thread”大约 20 次。

有人知道为什么吗?

最佳答案

主线程将退出,并声明 ForkJoinPool 中线程的生存期。您可以通过

看到这一点
public static void main(String[] args) 
{
    ForkJoinPool pool = new ForkJoinPool();
    pool.invoke(new MyRecursiveTask());

    try
    {
        Thread.sleep(10000);
    }
    catch (InterruptedException e)
    {
        e.printStackTrace();
    }
}

(当然,只是为了说明......)

关于java - 使用 Java RecursiveTasks 创建多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580981/

相关文章:

java - 在Java中修改void方法中的输入对象是不好的做法吗?

java - 为什么这个先行断言在 Java 中不起作用?

java - 在 Java 接口(interface)中使用单例

linux - 开启 fanotify 时多线程打开文件挂起

java - 使用 ForkJoin 和 Streams 构建自适应网格细化

java - asyncMode 是什么意思?

java - 仅当线程实际上已挂起时才进入同步块(synchronized block)的代码是否是双重检查锁定的示例?

java - 如何为未知数量的线程设置倒计时锁存器

c - 虽然从 sigwaitinfo 函数返回带有偏移量的 si_addr 导致段错误

java - 如何确定fork-join任务的合适分工阈值