大家好,针对同时运行多个线程,是从一个类创建不同的线程对象,还是创建两个类,其中一个实现可运行接口,另一个继承线程并根据需要从两个类中创建线程对象,哪种方法更可取,假设我们尝试同时运行7-10个任务。
- 哪种方法是最佳解决方案?
- 如果从单个类创建不同的线程对象,是否会出现任何问题或性能降低?
谢谢。一如既往地感谢建议。
大家好,针对同时运行多个线程,是从一个类创建不同的线程对象,还是创建两个类,其中一个实现可运行接口,另一个继承线程并根据需要从两个类中创建线程对象,哪种方法更可取,假设我们尝试同时运行7-10个任务。
谢谢。一如既往地感谢建议。
java.util.concurrent
包。这里是一个简短的例子:
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)(创建两个不同的同类线程)。
我认为没有必要为可以由同一类的两个不同线程完成的工作创建两个不同的类。
我认为你可以任意选择实现方式。如果你需要大量短暂的线程,可能需要使用线程池,可以参考java.util.concurrent.Executors。通常我会创建一个匿名的runnable类型类,例如:
executor.execute(new Runnable() {
//thread code goes here
});
通过继承Thread或者实现Runnable接口并使用new Thread(runnable)
创建线程,在性能方面几乎没有区别。使用一个类还是多个类也无关紧要。你应该根据要完成的工作设计你的类结构;如果两个线程在不同的数据上执行相同的工作,请为两个线程使用同一个类。
访问共享数据(无论是静态类变量还是其他数据)始终是一个大问题。