在Java中,如何创建线程,使每个线程都专门运行在一个核心中?

在Java中,如何创建线程,使每个线程都专门运行在一个核心中?,java,multithreading,cpu,Java,Multithreading,Cpu,可能重复: 我有一个服务器,它有一个16核的cpu 在Java中,我需要创建一些线程(线程数少于16个)。每个线程都需要运行一些操作,例如处理事件队列 我如何创建这些线程,以保证每个线程永远分配给一个核心?我的意思是我不想让操作系统用一个线程交换内核。我只希望有一个线程专门运行在一个固定的核心上 我可以这样做吗 我想要这个的原因是 我在同一台服务器上处理一些后台任务(计算密集型)和一些面向用户的任务。我不希望用户方面受到任何负面影响。例如,如果我的计算任务分配给16个内核,那么为用户端运行的

可能重复:

我有一个服务器,它有一个16核的cpu

在Java中,我需要创建一些线程(线程数少于16个)。每个线程都需要运行一些操作,例如处理事件队列

我如何创建这些线程,以保证每个线程永远分配给一个核心?我的意思是我不想让操作系统用一个线程交换内核。我只希望有一个线程专门运行在一个固定的核心上

我可以这样做吗


我想要这个的原因是


我在同一台服务器上处理一些后台任务(计算密集型)和一些面向用户的任务。我不希望用户方面受到任何负面影响。例如,如果我的计算任务分配给16个内核,那么为用户端运行的线程肯定会受到负面影响,对吗

你不能。JVM虚拟化了所有硬件,所以您不能做类似的事情


在某些特定的体系结构和特定的JVM上可能会有一些“技巧”,但这些技巧都是不可靠的。

不,你不能这样做,因为OS调度器是为内核分配线程的。运行java应用程序的JVM没有访问权限。

您不应该这样做

如果确实需要,可以使用本机调用:


但实际上,一定要有充分的理由这样做。为什么您认为这是个好主意?

不要在这方面浪费宝贵的开发时间。解决其他一些问题。如果操作系统核心管理所花费的时间对你的应用程序来说是一个问题,那么它无论如何都会在失败的边缘徘徊。

你能解释一下为什么要这样做吗?我希望我能这样做,因为我在同一台服务器上处理一些后台任务(计算密集型)和一些面向用户的任务。我不希望用户方面受到任何负面影响。例如,如果我的计算任务被分配到16个内核,那么为用户端运行的线程肯定会受到负面影响,对吗?这是一个糟糕的原因。您可以管理您的计算机以限制处理器的使用,这与任务不离开其核心无关。@JacksonTale基本上,只要给GUI线程最高优先级,您就会很好<代码>线程t=新线程(…);t、 设置优先级(线程最大优先级);t、 start()