黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
马清泽
时间:
2012-12-6 09:34
标题:
多线程问题
在实现多线程有两种方法,继承Thread和实现Runable接口的区别是什么?
作者:
魏秀盛
时间:
2012-12-6 10:21
本帖最后由 魏秀盛 于 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();
作者:
陈建华
时间:
2012-12-6 18:36
创建线程的两种方法中一种是继承Thread类,一种是实现Runnable接口,这两种方法,从实现与性能来说都没有什么区别,只是后一种方法经常被使用而已。那么为什么人们又喜欢用后一种呢? 我们可以从设计思想来思考这个问题。当我们要执行某一种任务时,我们应该对我们要执行的任务进行一种包装,就是java中的封装。我们将它封装成一种对象。,那么当我们采用一种线程的方式来运行我们的任务时,我们是直接将我们的任务给线程运行呢,还是将封装了任务的对象传递给线程呢。如果我们将一个对象传递给线程运行,那么这就与我们的面向对象思想想通了。而如果我们将我们的任务直接传递给线程去执行,当然也可以执行,但是如果我们的任务以后有了一点小的改动,那么我们就必须进入我们的线程进行改动。但是如果我们将任务对象传递进去,那么我们就可以直接进入那个任务对象进行改变。 你说那种方法好呢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2