当前位置: 首页 > 知识库问答 >
问题:

Java线程实际上不是并行执行的?

蒋波光
2023-03-14

到目前为止,我的印象是,在同一时间启动的两个线程也是并行执行的(两个线程都在同一时间运行它们的代码段),但我最近阅读了一些文档,我了解到它们实际上轮流执行它们的代码,因此第一个线程的代码段与第二个线程的代码段在同一时间执行是不存在的。我的理解正确吗?

如果是,那么多线程执行比单线程执行快多少?我这么问是因为唯一的区别是单线程顺序执行代码,而多线程可以轮流执行,但仍然需要相同的时间,因为它不是并行执行的

共有1个答案

海叶秋
2023-03-14

a)在多处理器机器上,线程实际上可以并行运行(每个CPU一个线程)

b)如果线程在等待IO等时调用thread.sleep(),那么其他线程就可以使用资源。因此,在处理外部资源时,多线程应用程序实际上比单线程应用程序更快

 类似资料:
  • 我创建了两个类来计算数字,其中一个类同步执行,另一个类将其分成两半,并在两个线程中执行这两半。(intel i5(4个CPU),8GB ram)代码如下: 公共类: 多线程执行:public class Sheet2{

  • 问题内容: 到目前为止,据我了解:Javascript是单线程的。如果您推迟执行某些过程,则只需将其安排(排队)在线程空闲时下次运行。但是Async.js定义了两种方法:和,我引用: 并行(任务,[回调]) 并行运行一系列功能,而无需等到上一个功能完成。如果任何函数将错误传递给其回调… parallelLimit(任务,限制,[回调]) 与并行执行相同,仅并行执行任务,任何时候最多执行“限制”任务

  • 问题内容: 我们有一个基于石英的调度程序应用程序,该应用程序每分钟运行约1000个作业,每分钟的秒数均匀分布,即每秒约16-17个作业。理想情况下,这16-17个作业应同时触发,但是该作业的execute方法的第一个语句(仅记录执行时间)非常晚。例如,假设我们从05:00到05:04每分钟安排1000个作业。因此,理想情况下,计划在05:03:50进行的作业应该在05:03:50记录了execut

  • 因为一次只能运行一条指令,并且假设CPU只运行这个进程。多线程难道不是线程之间快速的上下文切换,给人一种并行处理的错觉,但实际上并不是在处理吗? 那么,既然CPU要执行的指令数是一样的,不管是单线程还是多线程,完成的时间不应该是一样的吗?如果是,说明多线程是并行处理的一种方式不是错的吗?

  • 我需要执行一些任务。有些任务是独立的,有些任务依赖于其他任务的成功执行。独立任务可以并行运行以获得更好的性能。我把这些任务称为服务。列说明哪些服务将以串联方式执行,哪些服务将以并联方式执行。列描述了一组定义的服务所遵循的执行顺序。例如,服务A和B应该并行运行。如果它们已成功执行,则将执行服务C。请注意,服务C并不直接依赖于其先前服务的输出,但它必须在成功执行其先前服务后运行,因为服务C在执行期间需

  • 我们有一个基于quartz的调度程序应用程序,每分钟运行大约1000个作业,这些作业平均分布在每分钟的几秒钟内,即每秒大约16-17个作业。理想情况下,这16-17个作业应该同时触发,但是我们的第一条语句,它只是记录执行的时间,任务的execute方法调用得很晚。假设从05:00到05:04,我们每分钟安排1000个工作。因此,理想情况下,计划在05:03:50的作业应该在05:03:50记录ex