【问题标题】:Running multiple threads concurrently同时运行多个线程
【发布时间】:2011-05-23 14:34:53
【问题描述】:

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

  1. 什么是最好的解决方案?..
  2. 如果从一个类创建不同的线程对象,是否存在任何缺陷或性能损失?

谢谢。提示一如既往地受到赞赏。

【问题讨论】:

  • 线程和进程是两个不同的东西。如果你指的是线程,那么使用术语“线程”,而不是术语“进程”。
  • 你真的是指操作系统进程吗?这就是程序在编程环境中通常的含义。如果您实际上是指工作或任务,请避免使用过程一词,因为它会使其他程序员感到困惑。

标签: java multithreading


【解决方案1】:
  1. 看看很棒的 java.util.concurrent
  2. 从单个类创建不同的线程对象不会导致性能缺陷

这是一个简短的例子:

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());
}

【讨论】:

    【解决方案2】:

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

    我觉得没有必要为可以由同一类的 2 个不同线程完成的工作创建 2 个不同的类。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          主要的区别在于您设计对象层次结构的方式: 如果扩展 Thread 类,则不能扩展任何其他类(Java 是单继承)。所以通过实现 Runnable,你仍然可以在你的领域模型中扩展其他类。

          【讨论】:

            猜你喜欢
            • 2013-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-20
            • 2013-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多