猿问

Java:如何根据cpu内核扩展线程?

我不是一个优秀的Java程序员,这只是我的业余爱好,但是我渴望了解的东西比一般的东西还多。


我想用java中的多线程解决数学问题。我的数学问题可以分为多个工作单元,我想通过几个线程来解决。


但我不想在其上使用固定数量的线程,而希望将一定数量的线程与cpu核心数量相对应。我的问题是,为此我在互联网上找不到简单的教程。我发现的只是带有固定线程的示例。


那么,您可以帮我链接到一个很好的教程,还是可以给我一个简单而良好的例子?那真的很好:)


POPMUISE
浏览 341回答 3
3回答

吃鸡游戏

您可以通过使用静态运行时方法,确定提供给Java虚拟机的进程数availableProcessors。确定可用处理器的数量后,请创建该线程数量,并相应地拆分工作。更新:为了进一步阐明,线程只是Java中的一个对象,因此您可以像创建其他任何对象一样创建它。因此,假设您调用上述方法,发现它返回了2个处理器。太棒了 现在,您可以创建一个循环,该循环生成一个新的线程,并拆分该线程的工作,然后触发该线程。这是一些伪代码来说明我的意思:int processors = Runtime.getRuntime().availableProcessors();for(int i=0; i < processors; i++) {&nbsp; Thread yourThread = new AThreadYouCreated();&nbsp; // You may need to pass in parameters depending on what work you are doing and how you setup your thread.&nbsp; yourThread.start();}有关创建自己的线程的更多信息,请转到本教程。另外,您可能希望查看线程池以创建线程。

缥缈止盈

您可能也想看看java.util.concurrent框架。就像是:ExecutorService e = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());// Do work using something like eithere.execute(new Runnable() {&nbsp; &nbsp; &nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // do one task&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });要么&nbsp; &nbsp; Future<String> future = pool.submit(new Callable<String>() {&nbsp; &nbsp; &nbsp; &nbsp; public String call() throws Exception {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; future.get();&nbsp; // Will block till result available这比应付自己的线程池等要好得多。
随时随地看视频慕课网APP

相关分类

Java
我要回答