我有一个实现runnable的类m2
,可以用run()和start()调用。现在我已经阅读了“implements Runnable” vs. “extends Thread”,我在这里要求的是
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 我正在进行“多线程”,因为我找不到“线程”标记。
答案 0 :(得分:1)
.run()将执行该方法,.start()将启动将执行run()的线程
答案 1 :(得分:1)
new m2().run();
这会运行m2对象的run()方法(假设m2扩展Thread而不是实现Runnable) - 但是在当前线程中,而不是实际启动一个线程并在那里运行它。
他们如何比较(如何使用)匿名电话,如下所示。
对不在多个地方使用的小/普通事物使用匿名实现。如果它足够复杂以至于你想要测试它,那么它可能值得转移到非匿名类。
答案 2 :(得分:1)
您无法在start()
个实例上调用Runnable
,Runnable
没有start()
方法。如果您正在讨论调用Thread.run()
和Thread.start()
,那么start()
会产生新的主题(实时),但run()
执行run()
内的语句1}} 顺序。
来到匿名类vs命名类,它只是一种编码风格。人们更喜欢匿名类来编写相当小的接口实现
答案 3 :(得分:0)
可以通过扩展Thread类,实现Runnable接口和Callable接口来实现线程。
如果要返回值或抛出异常,则使用Callable,否则使用Runnable作为扩展Thread类限制了Class继承,并使进程变重。
如果您想了解更多内容,以下链接非常有用: Different ways to implement Threads in Java