黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: 赵红萍    时间: 2012-10-25 12:46
标题: 线程问题
创建一个线程可以继承Thread类,也可以继承Runable接口,那么用它们两个创造出的线程会不一样吗?启动线程有一个strat()方法和run()方法,它俩又有什么不同?
作者: 毛标    时间: 2012-10-25 12:53
线程应该是一样的
如果继承Thread类的话,复写了期中的run()可以直接用Thread中的start()直接启动
如果是实现Runable接口的话,复写了期中的run(),还要创建1个Thread类的对象,将实现类作为参数传递给Thread,在调用start()
作者: 邹海洋    时间: 2012-10-25 12:54
1.继承Thread类,每new一次都是一个新线程的建立;实现Runnable接口,可以只创建一个线程,同时被多方共享。
2.run()方法只是Thread类或Runnable接口中定义的要运行的代码,start()方法是开启线程,并执行run()方法中的内容。
作者: 鲁中需    时间: 2012-10-25 12:55
本帖最后由 鲁中需 于 2012-10-25 12:56 编辑

1.实现(接口)方式和继承方式的区别:
实现方式好处:避免了单继承的局限性。
在定义线程时,建议使用实现Runnable方式。

两种方式区别:(代码存放位置不同)
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。

2.启动线程只有一个方法,那就是调用start()方法,这样会启动线程并自动调用run()方法;
而只调用run()方法,仅仅是普通的函数调用,并没有启动线程。
作者: 怪盗急得    时间: 2012-10-25 12:56
继承Tread类的方式,通过复写run方法,创建子类对象,然后调用start方法,线程才开启。
实现Runnable接口的方式,要通过复写run方法,创建接口的子类实例对象,然后将Runnable接口的子类对象传递给Tread类的实例对象,然后调用start方法开启线程。

run方法不是开启线程的方法,开启线程的方法是start方法。如果单单只是调用run方法,那么只是通过主函数的线程来执行run方法中的代码而已,而start方法可以开启一个新的线程,来执行run方法中的代码。
作者: 给生活加点料    时间: 2012-10-25 13:36
1.java中支持多实现,而不支持多继承。
        如果使用了继承,那么我们程序的可扩展性下降,因为一个类只能有一个父类
        使用实现,我们可以实现多个接口,不影响我们程序的扩展性。
2.关于数据共享
        2.1如果使用继承Thread类来实现数据共享,那么这个数据要static,它的生命周期太长.
        2.2如果使用实现Runnable,这时候只需有一个实现Runnable对象将其传递给
Thread类的构造方法,就可以实现多个线程操作同一个数据。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2