2011-05-23 76 views
12

好日子所有,运行多个线程同时是它最好从一类来创建不同的线程对象或创建两个类,其中一个实现Runnable和一个延伸的线,然后从他们两个作为创建线程对象假设我们试图同时运行7到10个任务。运行多个线程同时

  1. 什么是最好的解决办法?..
  2. 是否有任何缺陷或性能下降,如果从单个类创建不同的线程对象?

谢谢。提示一如既往的赞赏。

+0

线程和进程是两个不同的东西。如果你的意思是线程,那么使用术语“线程”,而不是术语“过程”。 – 2011-05-23 14:42:42

+0

你真的指操作系统进程吗?这就是过程通常在编程环境中的含义;如果你实际上意味着工作或任务,避免使用这个词的过程,因为它会混淆其他程序员。 – 2011-05-23 14:43:43

+0

哎呀,对不起,我的意思是线程! – Rexx 2011-05-23 14:44:19

回答

2

我会亲自去选项(1)(创建2个不同的同一类的线程)。

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

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

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

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

2

我不认为这是你做它的方式。如果你将要有很多短命线程,你可能需要一个线程池,参见java.util.concurrent.Executors。通常我创建一个类型为runnable的匿名类,例如

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

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