Java 有可能在单核多核计算机上运行多线程应用程序吗?

Java 有可能在单核多核计算机上运行多线程应用程序吗?,java,c++,multithreading,Java,C++,Multithreading,我有一个应用程序,我需要运行多线程,但我希望它只使用计算机的一个核心,就像我的计算机有单核心一样(我知道多线程应用程序在单核心计算机上的行为),尽管它不是 此应用程序将部署在客户计算机(Windows XP&7)上,我不希望我的应用程序使用多个核心。这能做到吗?它是否依赖于编程语言?还是所有的线程管理都留给操作系统 提前感谢。您可以将整个程序的关联设置为仅绑定到一个cpu 在unix中,您可以使用任务集,但在windows中,我只知道如何从任务管理器中执行此操作,这可能不适合您 我有一个库,它允

我有一个应用程序,我需要运行多线程,但我希望它只使用计算机的一个核心,就像我的计算机有单核心一样(我知道多线程应用程序在单核心计算机上的行为),尽管它不是

此应用程序将部署在客户计算机(Windows XP&7)上,我不希望我的应用程序使用多个核心。这能做到吗?它是否依赖于编程语言?还是所有的线程管理都留给操作系统


提前感谢。

您可以将整个程序的关联设置为仅绑定到一个cpu

在unix中,您可以使用
任务集
,但在windows中,我只知道如何从任务管理器中执行此操作,这可能不适合您

我有一个库,它允许您通过编程设置亲和性

AffinitySupport.setAffinity(1); // only run on cpu 0.
这也会将从该点开始的任何线程限制为相同的关联


您可以添加一个带有main()的类,该类设置亲和性并调用普通的main(),这样您就可以在不更改任何现有代码的情况下添加该类。

如果您不想更改程序源代码,可以使用OS命令

在Linux上,您可以使用工具
cpulimit
。更多详情及


在Windows上,可以将/AFFINITY参数用于start命令。更多详细信息

将所有线程上的线程关联设置为一个核心。@brianbeuning这会确保没有线程在另一个核心上运行吗?或者它只是设置了首选项?@Theolod答案可能取决于操作系统,但对于Linux和Windows,答案似乎比首选项更强。在Windows上,进程级API是SetProcessAffinityMask()。