创建线程的方式

 我来答
xiangyao0486
2020-11-25 · TA获得超过5902个赞
知道大有可为答主
回答量:4923
采纳率:79%
帮助的人:124万
展开全部
一、继承Thread类创建线程子类
1.在这子类中重写run方法,在run方法内写线程任务代码
2.创建该子类实例,即是创建了一个线程实例
3.调用该实例的start方法来启动该线程
二、建一个类去实现Runnable接口
1.该类去实现接口的run方法,run方法内写线程任务代码
2.创建该类实例,把该实例当作一个标记target传给Thread类,如:Thread t = new Thread(该类实例);即创建一个线程对象
3.调用线程的star方法来启用该线程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
艳阳天儿9850

2020-11-25 · 愿我用专业的法律知识帮您答疑解惑。
艳阳天儿9850
采纳数:10332 获赞数:16692

向TA提问 私信TA
展开全部
我们常见的有两种,一个是继承thread类,另一个是实现runnable接口。实现runnable接口和继承Thread类两种实现多线程方式的区别

然后对四种方式进行一个简单分类:

无返回值:

1.继承thread类

2.实现runnable接口

有返回值:

3.callable接口

4.线程池

也可以说是三种方式,线程池是一种封装好的技术。

实现callable接口会有一个泛型,这泛型即代表返回值的类型。重写call()方法,得到返回值。然后注意这里使用的时候是先将实例传入FutureTask,然后再将FutureTask传入thread类。然后再start。然后调用FutureTask的get方法就可以取得返回值,这里要注意,只有线程结束运行了才能获取到返回值,不然会一直等待,在等待计算线程出结果之前你可以先做其他事情。当然,你不知道它什么时候会结束,所以你只能在必须等待这个线程结果调用get()方法进行阻塞。如果线程一开始你就调用get方法阻塞住,那就和单线程没区别了。

这里我的理解是:实现callable接口是比较适合去固定完成一个任务,比如计算数据,去确认一件事情之类的,这样开启一个线程去做这种事情的效率就比单线程的效率比较高,这样在主线程中可以做着别的事情先,后面再需要的时候再取出来。

然后来看线程池:

其实所有的池技术都是一个道理:当创建和销毁过于频繁的时候,就会非常消耗系统资源,影响系统性能和响应速度,netty的内存池,数据库连接池,线程池,都是一样的,只不过是对象不同,但目的都是类似。所以才导致了池技术的产生。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式