我有一个循环迭代10次,每次执行一些相关methods.So时间是有可以为循环的每个实例执行相同任务parallaly任何解决方案。
首先要认识到的是,除非您使用第三方库,否则您没有对任务到核心映射的特定控制。总的来说,你不想这么做 - 只要让JVM明智就可以了。
要利用硬件上的所有内核,通常需要更改固定线程池中的线程数。您可以使用缓存线程池,根据提交到ExecutorService
的任务数量增加任务。在现代的JVM和操作系统上,抖动并不是一个担心,所以这很适用,除非你正在谈论1000个任务。
但通常我在池中设置了固定数量的线程。如果任务的CPU占用率达到100%,那么我可以设置线程的数量以匹配JVM所具有的虚拟处理器的数量。通常使用日志输出,网络事务和其他IO,您可能需要增加线程数来利用所有处理器。我会用不同的值运行你的程序几次。
在你的情况下,你似乎想专门在一个线程中运行作业0,1,2,3,而4,5在另一个线程中并行运行(希望)。要完成此任务,您应该向ExecutorService
提交4个任务,并让每个任务都运行您想要的迭代编号。
也许是这样的:
executorService.submit(new MyTask(new int[] { 0, 1, 2, 3}));
executorService.submit(new MyTask(new int[] { 4, 5 }));
如果线程映射的数量是任意的,那么我刚刚提交10个任务的ExecutorService
,它会在FIFO方式并行运行的任务。
http://stackoverflow.com/questions/4010185/parallel-for-java – devshorts