A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马清泽 中级黑马   /  2012-12-6 09:34  /  1402 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在实现多线程有两种方法,继承Thread和实现Runable接口的区别是什么?

2 个回复

正序浏览
创建线程的两种方法中一种是继承Thread类,一种是实现Runnable接口,这两种方法,从实现与性能来说都没有什么区别,只是后一种方法经常被使用而已。那么为什么人们又喜欢用后一种呢? 我们可以从设计思想来思考这个问题。当我们要执行某一种任务时,我们应该对我们要执行的任务进行一种包装,就是java中的封装。我们将它封装成一种对象。,那么当我们采用一种线程的方式来运行我们的任务时,我们是直接将我们的任务给线程运行呢,还是将封装了任务的对象传递给线程呢。如果我们将一个对象传递给线程运行,那么这就与我们的面向对象思想想通了。而如果我们将我们的任务直接传递给线程去执行,当然也可以执行,但是如果我们的任务以后有了一点小的改动,那么我们就必须进入我们的线程进行改动。但是如果我们将任务对象传递进去,那么我们就可以直接进入那个任务对象进行改变。 你说那种方法好呢
回复 使用道具 举报
本帖最后由 魏秀盛 于 2012-12-6 10:24 编辑

创建一个线程一般由两种方法:
1.构建一个Thread类的子类定义一个线程,如下所示:
class MyThread extends Thread
{
   public void run()
   {
   }
}
然后构建一个子类的对象,并调用start方法,目前这类方法已经不再推荐使用,应该从运行机制上减少需要并行运行的任务数量,如果有很多任务,要为每一个任务创建一个独立的线程所付出的代价太大了,可以使用线程池来解决这个问题。
2.实现Runnable接口,然后调用Thread.start方法执行任务指令,这里不推荐调用Runnable对象的run方法,直接调用run方法,只会执行同一个线程中的任务而不会穷的那个新线程,应该调用Thread.start方法,这个方法将创建一个执行run方法的新线程
new Thread(new Runnable() {
  public void run(){...};
}).statr();

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马