java 中实现Runable和继续Thread有什么区别?| Java Debug 笔记

149 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

提问:java 中实现Runable和继续Thread有什么区别?

从什么时候开始在Java中使用线程开始,我发现了以下两种编写线程的方法:

implements Runnablepublic class MyRunnable implements Runnable {
    public void run() {
        //Code
    }
}
//Started with a "new Thread(new MyRunnable()).start()" call

或者,使用extends Thread:

public class MyThread extends Thread {
    public MyThread() {
        super("MyThread");
    }
    public void run() {
        //Code
    }
}
//Started with a "new MyThread().start()" call

这两个代码块有什么显着区别吗?

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

仅在要覆盖某些行为时才继承。

更确切地说,应将其理解为:

继承少,接口多。

高分回答:

通常,我建议您使用Runnable而不是类似的东西,Thread因为它可以使您的工作与并发选择保持松散的联系。例如,如果使用aRunnable并在以后决定实际上并不需要它Thread,则可以只调用threadA.run()。

警告:在这里,我强烈建议不要使用原始线程。我更喜欢使用Callables和FutureTasks(来自javadoc:“可取消的异步计算”)。与大量原始线程相比,超时的集成,适当的取消以及现代并发支持的线程池对我来说都更加有用。

后续:有一个FutureTask构造函数,可让您使用Runnables(如果您对此最满意),并且仍可从现代并发工具中受益。引用javadoc:

如果不需要特定的结果,请考虑使用以下形式的构造:

Future<?> f = new FutureTask<Object>(runnable, null)

因此,如果我们将它们替换runnable为your ,则会threadA得到以下信息:

new FutureTask<Object>(threadA, null)

允许您更靠近Runnables的另一个选项是ThreadPoolExecutor。您可以使用execute方法传入Runnable以执行“将来某个时间执行给定的任务”。

如果您想尝试使用线程池,则上面的代码片段将变为以下内容(使用Executors.newCachedThreadPool()工厂方法):

ExecutorService es = Executors.newCachedThreadPool();
es.execute(new ThreadA());

文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/5…

作者建议:了解一下就行,创建线程池和异步任务比较常用

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️