最近看到一篇关于Java线程的文章,里面有说使用集成Thread 还是 实现Runable接口
对于这两种方式哪种好并没有一个确定的答案,它们都能满足要求。就我个人意见,我更倾向于实现Runnable接口这种方法。因为线程池可以有效的管理实现了Runnable接口的线程,如果线程池满了,新的线程就会排队等候执行,直到线程池空闲出来为止。而如果线程是通过实现Thread子类实现的,这将会复杂一些。
底下有人评论说
实现了Runnable接口,不是线程,应该称为任务,线程池只接受任务,线程池怎么还可以接受线程呢?求解
大家怎么看上面说的
首先得理解什么是Thread?
这是java.lang.Thread类的javadoc的部分引用,废话地翻译一下,Thread只是程序中一个执行序,JVM在允许程序中同时存在多个执行序并发执行。Thread其实就是JVM对操作系统线程的一个抽象。
其次得理解什么是Runnable?
这是java.lang.Runnable类的javadoc的部分引用。废话地翻译一下,这个接口提供一种通用的协议,那些需要在特定的活动时刻执行某些特定代码的对象都必须遵守这个协议—— 实现run方法。
再次,说说Java使用多线程的几个主要方式:
这3种方式,最终执行都要落实到Thread,因为Thread是JVM对操作系统线程的一个抽象,只有它才有被操作系统调度,获得CPU执行时间片的能力。
最后说说Thread与Runnable的不同:
PS:要想好好地理解这二者的异同,建议仔细读读Thread和Runnable的javadoc。