将Thread对象作为Runnable对象使用的结果
来源:互联网 发布:rt809编程器怎么安装 编辑:程序博客网 时间:2024/06/05 11:43
review一段代码,发现一个程序员在提交途任务给ExexutorService时,任务并不是实现Runnable接口而是继承Thread。
让其优化,竟然说Thread也是实现Runnable,父类(接口)能使用的地方子类肯定也能使用。
理论没有错,能使用但并不代表适用,应该使用Runnable时直接给一个Thread,结果真的一样吗?
Runnable仅仅是一个接口,其中只要你实现run方法,它并不有更多的逻辑,你的Runnable提交给ExexutorService它只会找一个已经存在的线程来执行
run中的代码逻辑,和生产者消费都模式没有多大区别。但是如果你每次提交Thread对象,虽然它的作用仅仅是作为Runnable的run方法被调用,并不会
新分配线程,但是构造Thread对象的成本是非常大的,n多的上下文,安全检查,线程栈的分配。特别是安全性检查,你可以跟进去看它执行了一大砣一大
砣的逻辑,但最后,你并不把它作为线程来运行,你只要run方法中的代码交给ExexutorService中的其它线程来运行,这种overhead的开销,很多时候比
run中的执行逻辑还大。
所以该用Runnable的时候,千万不要把Thread传进去。
0 1
- 将Thread对象作为Runnable对象使用的结果
- 将string类型的对象重新作为“输入”使用
- 创建Thread对象时,当Runnable的run撞上Thread的run时谁会让步?
- Thread的wait和notify是指的是 Runnable对象而不是 Thread对象,切记,否则唤醒失效
- 将对象作为参数传递
- Thread对象锁使用
- QMap使用类的对象作为key
- JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口
- 使用对象数组作为参数(对象数组类型的参数)
- Java 将自定义的对象作为HashMap的key
- 定时器,Handler,Thread,Runnable的使用简介
- Thread及Runnable的使用方式简介
- 使用JDBC将查询结果集保存为对象时需要注意的问题
- 作为对象的函数
- 使用Thread、Runnable、Handler
- Thread 对象的 方法
- Spring 如何将无法使用new操作符新建的对象作为spring的bean (使用FactoryBean接口)
- HashMap使用对象作为key
- SpringMVC form提交报错The request sent by the client was syntactically incorrect
- [cmd] Windows 常用命令
- 对象
- linux du命令
- POSIX pthread
- 将Thread对象作为Runnable对象使用的结果
- 函数
- C#中精确计时的一点收获!!!
- SQL中CONCAT连接通配符的问题
- 简单的String类实现
- R-B Tree
- iOS崩溃调试的使用和技巧总结
- ABAP实战屏幕SCREEN设计(一)
- github使用方法