同时运行多个线程

时间:2011-05-23 14:34:54

标签: java multithreading

美好的一天,为了同时运行多个线程,建议从一个类创建不同的线程对象,或者创建两个类,其中一个实现runnable,一个扩展一个线程,然后根据需要创建两个线程对象,假设我们是试图同时运行7-10个任务。

  1. 什么是最好的解决方案?..
  2. 如果从一个类中创建不同的线程对象,是否存在任何陷阱或性能损失?
  3. 谢谢。提示一如既往地受到赞赏。

5 个答案:

答案 0 :(得分:20)

  1. 查看精彩的java.util.concurrent
  2. 从单个类创建不同的线程对象没有性能缺陷
  3. 这是一个简短的例子:

    private static class SomeTask implements Runnable
    {
      @Override
      public void run()
      {
        doSomething();
      }
    }
    
    public static void main(String[] args)
    {
      ExecutorService executor = Executors.newCachedThreadPool();
      for (int i = 0; i < 8; i++) executor.execute(new SomeTask());
    }
    

答案 1 :(得分:3)

我个人会选择选项(1)(创建同一类的2个不同的线程)。

我觉得不需要为同一个类的2个不同线程创建2个不同的类。

答案 2 :(得分:3)

我认为你做这件事的方式并不重要。如果您将拥有大量短期线程,您可能需要一个线程池,请参阅java.util.concurrent.Executors。通常我会创建一个类型为runnable的匿名类,例如

executor.execute(new Runnable() {
    //thread code goes here
});

答案 3 :(得分:2)

通过扩展Thread或通过实现Runnable并使用new Thread(runnable)创建线程之间的性能差别不大。无论是使用一个类还是几个类都无关紧要。你应该根据要完成的工作来设计你的班级结构;如果两个线程对不同的数据进行相同的工作,则对两者使用相同的类。

访问共享数据(无论是静态类变量还是其他内容)始终是一个大问题。

答案 4 :(得分:0)

产生差异的主要因素是您如何设计对象层次结构: 如果扩展Thread类,则不能扩展任何其他类(Java是单继承)。因此,通过实现Runnable,您仍然可以扩展域模型中的其他类。