首页 > Java > Java中的“实现可运行”与“扩展线程” 区别对比

Java中的“实现可运行”与“扩展线程” 区别对比

上一篇 下一篇

从我在线程上花费的时间来看,我发现了以下两种编写线程的方法:Java

使用工具运行:

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

或者,使用扩展线程

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

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

分割线

网友回答:

dr:实现 Runnable 更好。但是,警告很重要

一般来说,我建议使用类似的东西,而不是因为它允许你只保持你的工作与你选择的并发性松散耦合。例如,如果你使用 a 并稍后决定这实际上不需要它自己的,你可以只调用 threadA.run()。RunnableThreadRunnableThread

警告:在这里,我强烈反对使用原始线程。我更喜欢使用Callables和FutureTasks(来自javadoc:“A Cancellable Asynchronous Computing”)。对我来说,超时的集成、适当的取消和现代并发支持的线程池都比成堆的原始线程有用得多。

随访:有一个构造函数允许您使用 Runnables(如果这是您最熟悉的),并且仍然可以获得现代并发工具的好处。引用javadoc:FutureTask

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

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

因此,如果我们将它们替换为您的 ,我们会得到以下内容:runnablethreadA

new FutureTask<Object>(threadA, null)

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

如果你想尝试使用线程池,上面的代码片段将变成如下所示(使用 Executors.newCachedThreadPool() 工厂方法):

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

分割线

网友回答:

是的:实施是首选的方式,IMO。你并没有真正专注于线程的行为。你只是给它一些东西来运行。这意味着作曲是哲学上“更纯粹”的方式。Runnable

实际上,这意味着您也可以从另一个类实现和扩展……你也可以通过 Java 8 的 lambda 表达式实现。RunnableRunnable

分割线

网友回答:

故事的寓意:

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

或者更确切地说,它应该被理解为:

继承更少,接口更多。

模板简介:该模板名称为【Java中的“实现可运行”与“扩展线程” 区别对比】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 154次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-15
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信素材 html5 自适应 微信文章 企业网站 微信模板 微信公众平台 微信图片 单页式简历模板 响应式
您可能会喜欢的其他模板