初始化线程的不同方式

时间:2013-10-08 07:08:49

标签: java multithreading

我有一个实现runnable的类m2,可以用run()和start()调用。现在我已经阅读了“implements Runnable” vs. “extends Thread”,我在这里要求的是

    对于类m2,
  1. start()vs run()
  2. 他们如何比较(如何使用)匿名电话,如下所示。
public class test1{
    public static void main(String[] args){
        // m2
        new m2().run();
        new Thread( new m2()).start();
        // anonymous
        new Thread(new Runnable(){
            public void run(){
                System.out.println("anonymous code looks real cool!");
            }
        }).start();
    }
}


class m2 implements Runnable{
    public void run(){
        System.out.println("hello from m2");
    }
}

ps 我正在进行“多线程”,因为我找不到“线程”标记。

4 个答案:

答案 0 :(得分:1)

.run()将执行该方法,.start()将启动将执行run()的线程

答案 1 :(得分:1)

new m2().run();

这会运行m2对象的run()方法(假设m2扩展Thread而不是实现Runnable) - 但是在当前线程中,而不是实际启动一个线程并在那里运行它。

  

他们如何比较(如何使用)匿名电话,如下所示。

对不在多个地方使用的小/普通事物使用匿名实现。如果它足够复杂以至于你想要测试它,那么它可能值得转移到非匿名类。

答案 2 :(得分:1)

  1. 您无法在start()个实例上调用RunnableRunnable没有start()方法。如果您正在讨论调用Thread.run()Thread.start(),那么start() 会产生新的主题(实时),但run()执行run()内的语句1}} 顺序

  2. 来到匿名类vs命名类,它只是一种编码风格。人们更喜欢匿名类来编写相当小的接口实现

答案 3 :(得分:0)

可以通过扩展Thread类,实现Runnable接口和Callable接口来实现线程。

如果要返回值或抛出异常,则使用Callable,否则使用Runnable作为扩展Thread类限制了Class继承,并使进程变重。

如果您想了解更多内容,以下链接非常有用: Different ways to implement Threads in Java