学到现在 我有一点不是很明白 用Runnable接口和Thread类创建线程貌似可以得到相同运行结果,那到底这两种方法有什么不同呢?或者说用Runnable接口创建的线程是不是都可以用Thread来创建?希望有某位大神可以为我解答这个问题
第一:创建线程只有继承Thread类和实现Runnable接口两种方式(Thread也是实现了Runnable接口);
第二:若以继承Thread类方式创建线程则这个类的实例就可以重写Thread类的几十个方法,注意是好几十个方法;
第三:若以实现Runnable接口的方式创建线程则仅仅只有一个run()方法可供重写;注意是只有一个;
实现Runnable接口创建的线程最终还是要通过将自身实例作为参数传递给Thread然后执行,当你要为一个没有继承Thread类的类创建线程,而且只想让这个类的实例调用run方法执行任务,这时候Runnable接口就相当于为你的目标类提供了一个激活方式,设计该接口的目的是为了那些希望在激活时执行代码的对象提供一个公共协议,激活的意思是说某个线程已启动并且尚未停止。
这两种创建线程的方法本身没有什么不同,一个是实现Runnable接口,一个是继承Thread类。而使用实现Runnable接口这种方法:1.可以避免Java的单继承的特性带来的局限性;2.适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码及数据有效分离,较好地体现了面向对象的设计思想。开发中大多情况下都使用实现Runnable接口这种方法创建线程。