当前位置: 首页 > 面试题库 >

线程与CompletableFuture

吕皓
2023-03-14
问题内容

与使用CompletableFuture相比,直接将代码传递给线程有什么好处?

Thread thread = new Thread(() -> {do something});
thread.start();

VS

CompletableFuture<Void> cf1 =  
     CompletableFuture.runAsync(() -> {do something});

问题答案:

CompletableFuture.runAsync(...)在受 管理 的forkJoin-Pool中运行Runnable ,同时new Thread()创建一个 必须管理 的新线程。

“受管理”
是什么意思,它是预先分配的,线程在JVM中共享。当可运行对象完成时,该线程可重用于其他可运行对象。这样可以更好地利用资源,尤其是因为线程实例化是一项昂贵的操作-
不仅必须分配对象,还必须分配一些额外的非堆内存-线程堆栈。



 类似资料:
  • 问题内容: Python中的和模块之间有什么区别? 问题答案: 在Python 3中,已重命名为。它是用于实现的基础结构代码,普通的Python代码不应该靠近它。 公开了底层操作系统级别流程的原始视图。这几乎绝不是您想要的,因此在Py3k中重命名以表明它实际上只是实现细节。 添加了一些额外的自动记帐功能,以及一些便捷实用程序,所有这些使它成为标准Python代码的首选。

  • 问题内容: 看起来我已经搞砸了Java线程/ OS线程和解释性语言。 在开始之前,我确实了解绿色线程是Java线程,其中JVM处理线程,并且整个Java进程仅作为单个OS线程运行。因此,在多处理器系统上是没有用的。 现在我的问题是。我有两个线程A和B。每个线程都有10万行独立代码。我在多处理器系统上的Java程序中运行这些线程。每个线程都将被赋予一个本机OS线程来运行,该线程可以在不同的CPU上运

  • 线程与进程是操作系统里面的术语,简单来讲,每一个应用程序都有一个自己的进程。 操作系统会为这些进程分配一些执行资源,例如内存空间等。 在进程中,又可以创建一些线程,他们共享这些内存空间,并由操作系统调用,以便并行计算。 我们都知道现代操作系统比如 Mac OS X,UNIX,Linux,Windows 等可以同时运行多个任务。 打个比方,你一边在用浏览器上网,一边在听敲代码,一边用 Markdow

  • 问题内容: 线程ID和线程句柄有什么区别?为什么两者都需要?Windows和Linux之间有区别吗? 问题答案: 据我所知,Linux的pthread库没有线程句柄的概念。pthread_create和其他pthreads函数,返回线程ID。 在Windows下,线程句柄不同于线程ID,就像文件句柄不同于文件名一样。 线程句柄是一个令牌,它使您可以对线程执行某些操作(通常等待或杀死它)。Win32

  • 为什么单线程和多线程脚本具有相同的处理时间?多线程实现不是应该少1/#线程数吗?(我知道当您达到最大cpu线程时,回报会递减) 我搞砸了我的实现吗?

  • 一、进程的状态与转换 运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。 就绪状态:进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。 阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。 注意区别就绪状态和等待状态: 就绪状态