一道说难不难的面试题~

runnable 和 thread的区别, 线程池中他们的区别,两个都是怎么工作的 ???
求详细解答~
#Java#
全部评论
一个是父类要继承,一个是接口要实现。 java可以实现多个接口,但只能继承一个父类,所以runnable更灵活一点。
点赞 回复 分享
发布于 2018-07-15 19:35
runnable只是一个约定的接口 ,如果你想自己实现线程池自己定义接口随便叫都行。线程池里面task实现runnable接口放到阻塞队列里面,同时维持worker类中的线程去真正执行task,执行task其实就是调用runnable接口的run方法,所以runnable没啥含义,thread才是真正意义的可运行的线程
点赞 回复 分享
发布于 2018-07-15 21:03
个人理解:当实现了runnable的类放进线程池执行时,线程池会创建一个叫worker的类实例,放进工作集。worker的构造方***创建一个线程,这个线程把这个worker本身放进去,就是new Thread(this)。然后线程池调用这个线程的start会去执行worker的run方法。执行完毕会去等待队列获取任务继续执行。如果没有获取到任务那么就要查看是否当前线程数大于核心线程数,是的话将等待初始化设置的存活时间后退出循环,线程结束。有个比较好的源码解析可以看看 https://www.cnblogs.com/qingquanzi/p/8146638.html
点赞 回复 分享
发布于 2018-07-15 20:14
可以看下我的博客 https://xiepuhuan.github.io/2017/10/26/Java线程池源码解析/
点赞 回复 分享
发布于 2018-07-16 09:48
threadpoolexecutor 里面worker工作类实现了Runnable接口 worker的构造函数,传了一个task,也传了一个thread,其实就是把任务和线程解耦了 我是这么理解的。。
点赞 回复 分享
发布于 2018-07-15 20:17
Runable 是任务 ,线程是线程 ,线程池中的任务在工作队列,线程池中的线程取队列首节点任务执行,不知道对不对
点赞 回复 分享
发布于 2018-07-15 19:57
感觉是一个东西
点赞 回复 分享
发布于 2018-07-15 19:35

相关推荐

牛客创作赏金赛
点赞 评论 收藏
分享
1.在过去的经历中体现个人能力的事。2.介绍以下项目,以及为什么会做出这些业务功能。3.栈和队列的区别,以及怎么实现一个栈,数组和链表实现一个栈的区别。4.jvm中栈空间主要存储的是什么。5.栈有没有可能发生栈溢出,什么情况下会发生栈溢出。(递归? 函数调用深度过深?)6.怎么才能避免栈发生溢出(必须要调用多个),改变栈空间的大小?7.string, stringbuilder, stringBuffer的区别。8.jvm的内存模型,以及执行过程。9.jvm的垃圾回收机制。10.根路径法的根是怎么确定的(是什么?)。11.创建一个对象在jvm中的完整的过程。12.双亲委派机制?作用?13.双亲委派机制是否可以违背?怎么实现?14.线程池中的线程调度。15.多线程的一个并发问题,为什么会产生并发(cpu竞争?不可见性?)(本质原因:一个进程有多个线程?)16.怎么才能避免多线程并发问题(加锁?join? 原子性操作?)17. ThreadLocal和Thread18.线程池中线程的优先级19.线程池满了,又该怎么做?20.什么情况下会发生内存泄漏,以及怎么避免内存泄漏,解决方法。21.怎么发现对象内存泄漏22.https相比http更加安全,是怎么实现的23.http用的事传输层的什么协议24.说说tcp协议,三次握手25.怎么保证传输的顺序,重复的内容。校验和?滑动窗口解决什么?26.ai与传统的搜索引擎的主要区别。27.怎么看待ai28.算法,很简单的一个。计算一个整数的二进制数中1的个数。然后就是聊天,怎么准备实习的反问:提供建议?后端开发与运营开发的区别?自己太菜了面完秒挂
点赞 评论 收藏
分享
查看20道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务