全部评论
一个是父类要继承,一个是接口要实现。 java可以实现多个接口,但只能继承一个父类,所以runnable更灵活一点。
个人理解:当实现了runnable的类放进线程池执行时,线程池会创建一个叫worker的类实例,放进工作集。worker的构造方***创建一个线程,这个线程把这个worker本身放进去,就是new Thread(this)。然后线程池调用这个线程的start会去执行worker的run方法。执行完毕会去等待队列获取任务继续执行。如果没有获取到任务那么就要查看是否当前线程数大于核心线程数,是的话将等待初始化设置的存活时间后退出循环,线程结束。有个比较好的源码解析可以看看 https://www.cnblogs.com/qingquanzi/p/8146638.html
runnable只是一个约定的接口 ,如果你想自己实现线程池自己定义接口随便叫都行。线程池里面task实现runnable接口放到阻塞队列里面,同时维持worker类中的线程去真正执行task,执行task其实就是调用runnable接口的run方法,所以runnable没啥含义,thread才是真正意义的可运行的线程
感觉是一个东西
Runable 是任务 ,线程是线程 ,线程池中的任务在工作队列,线程池中的线程取队列首节点任务执行,不知道对不对
threadpoolexecutor 里面worker工作类实现了Runnable接口 worker的构造函数,传了一个task,也传了一个thread,其实就是把任务和线程解耦了 我是这么理解的。。
可以看下我的博客 https://xiepuhuan.github.io/2017/10/26/Java线程池源码解析/
相关推荐
11-25 19:33
南京理工大学 C++ 乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享