在1个类中运行2个以上的线程

时间:2010-07-05 11:26:34

标签: java multithreading

我有一个通过调用

启动新线程的类
public void omnom(){
   t = new Thread(this, "My Thread"); 
   t.start();
}

然后新线程在run()方法内运行。所以我有两个线程工作正常,但我如何添加第三个?我想“拆分”2个帖子,例如t.start(); + f.start();我如何从omnom()拆分它们并将它们发送给2个不同的“run()”方法

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以创建一个匿名Runnable类来调用您喜欢的任何“运行”方法:

public void omnom() {
    new Thread(this, "My Thread").start();
    new Thread(
            new Runnable() {
                public void run() {
                    otherRunMethod();
                }
            }
        ).start();
}

答案 1 :(得分:1)

当您创建线程时,您将传递Runnable的实例作为第一个参数 - 以及该线程调用的此runnable的run()方法。

因此,在您的特定情况下,您正在传入this - 可能是您从实现Runnable调用的类,并且有一个run()方法,这就是为什么该方法被线程{{1}调用的原因}}。要让另一个线程t调用另一个方法,您只需要将不同的Runnable实例传递给具有不同f方法的线程构造函数,如下所示:

run()

答案 2 :(得分:0)

只需重复new Thread()start()

您必须区分编译时结构和运行时结构。您可以根据需要使用相同的类字节代码来创建尽可能多的线程,并且他们将很乐意执行该类的任何部分以便执行其私有执行流 - 即使它是当前由另一个线程执行的相同代码行!

(事实上,这就是并发编程如此复杂的原因,以及为什么甚至需要同步:因为字节码不是由特定线程拥有,而是由类加载器拥有。)