java中现实多线程可以继承Thread,也可以实现Runable;
一般的用法都是重写或实现run方法,然后用Tread调用start方法(注意,只有Thread有start方法;Runable是没有start方法的);
在我们通常简单的用多线程时尽量通过实现Runable的方式;因为实现R相对于继承T有如下有点:
1. 继承了T后不能再继承别的类,但实现R的同时可以再继承其他某个类,然而两者都实现了简单的多线程,所以R有此优势;
2. 实现了R后可以资源共享,而继承了T后不能资源共享(共享指的是共同操作类的成员变量(当然是非静态变量,静态的肯定都能共享));因为继承了T后每次使用时都创建新的类,而实现R后每次使用时创建了新的Thread,但创建这些Thread是可以用同一个Runable,所以可以共享;此乃第二个有点;
然而继承Thread不可能一无是处,否则就没必要存在这种方式了;
事实上Runable提供了run方法(Thread的run也是实现了Runable),而Thread中是有各种线程实现、管理的方法,start是其中一个方法,用来提供启动线程的方法;
所以,当现有的多线程方式Thread不能满足你的要求,你需要修改或优化Thread时,必须要继承Thread了,因为很多对线程相关的的东西是在Thread中实现的;这个是Thread存在的必要,也即优势;
总之,想要继承别的类,或想要简单共享资源就用Runable,(当然,我觉得Thread通过别的方式应该也可以实现资源共享的);想要优化线程时可以继承Thread; 一般情况用Runable,没有特定需求是两者都可用;
OVER;