如何并行运行不同的方法

用户名

我有一个Java方法,其中包含5种不同的内部方法。为了提高性能,我想并行调用这些方法。

例如,使用线程并行运行method1,method2,... method5。

private void getInformation() throws SQLException,
            ClassNotFoundException, NamingException {
    method1();
    method2();
    method3();
    method4();
    method5();
}

但是所有这5种方法都有不同的业务逻辑。

碎纸机

做这样的事情:

  1. 对于每个方法,创建一个包装该方法的Callable对象。
  2. 创建一个执行器(固定线程池执行器应该可以)。
  3. 将所有可调用对象放在列表中,然后使用执行程序调用它们。

这是一个简单的例子:

public void testThread()
{

   //create a callable for each method
   Callable<Void> callable1 = new Callable<Void>()
   {
      @Override
      public Void call() throws Exception
      {
         method1();
         return null;
      }
   };

   Callable<Void> callable2 = new Callable<Void>()
   {
      @Override
      public Void call() throws Exception
      {
         method2();
         return null;
      }
   };

   Callable<Void> callable3 = new Callable<Void>()
   {
      @Override
      public Void call() throws Exception
      {
         method3();
         return null;
      }
   };

   //add to a list
   List<Callable<Void>> taskList = new ArrayList<Callable<Void>>();
   taskList.add(callable1);
   taskList.add(callable2);
   taskList.add(callable3);

   //create a pool executor with 3 threads
   ExecutorService executor = Executors.newFixedThreadPool(3);

   try
   {
      //start the threads and wait for them to finish
      executor.invokeAll(taskList);
   }
   catch (InterruptedException ie)
   {
      //do something if you care about interruption;
   }

}

private void method1()
{
   System.out.println("method1");
}

private void method2()
{
   System.out.println("method2");
}

private void method3()
{
   System.out.println("method3");
}

确保每个方法都不共享状态(例如同一类中的公共可变字段),否则您可能会得到意想不到的结果。Oracle为Java执行器提供了很好的介绍另外,如果您正在使用Java进行任何形式的线程编写,那么本书都将是很棒的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Julia并行运行方法?

来自分类Dev

如何与Celery并行运行Django方法?

来自分类Dev

在不同的测试中并行运行testng方法

来自分类Dev

并行运行异步方法

来自分类Dev

如何并行运行apache

来自分类Dev

如何并行运行DEoptim?

来自分类Dev

如何并行运行剧本

来自分类Dev

如何使C#异步方法实际并行运行?

来自分类Dev

与OWIN并行运行不同的框架

来自分类Dev

不同的IntentServices可以并行运行吗?

来自分类Dev

不同的IntentServices可以并行运行吗?

来自分类Dev

异步方法未并行运行

来自分类Dev

异步方法未并行运行

来自分类Dev

异步任务方法未并行运行

来自分类Dev

如何并行运行多个Wine实例

来自分类Dev

如何与乘法增量并行运行

来自分类Dev

如何并行运行LINQ'let'语句?

来自分类Dev

如何并行运行子程序?

来自分类Dev

如何并行运行Spock测试?

来自分类Dev

如何使该rxjava zip并行运行?

来自分类Dev

如何并行运行Spring Batch作业

来自分类Dev

如何并行运行多个shell脚本?

来自分类Dev

如何优化Spark sql以并行运行

来自分类Dev

如何使SBT并行运行测试套件?

来自分类Dev

如何与opengl并行运行程序

来自分类Dev

如何使Selenium与Scrapy并行运行?

来自分类Dev

如何与ThreadPoolExecutor并行运行代码?

来自分类Dev

TeamCity:如何并行运行测试项目

来自分类Dev

如何并行运行多个芹菜任务?