关系
1、继承实现问题:
都可以来创建线程。但一个自定义线程如果选择继承(extends)Thread类来创建线程的话,只能继承这一个类,就不能同时继承其他类了;而选择实现(implements)Runnable接口来创建线程,还可以同时实现其他接口。
原因:单继承,多实现。
2、定义问题:
1)继承thread类,直接创建此类对象,然后调用.start()开启线程
2)实现Runnable接口,new一个实现runnable接口的子类,通过Thread类创建对象,传递runnable子类对象作为参数,然后调用.start方法开启线程
3、资源问题:
继承thread类之后,再每new一个对象时会开启一个新线程,每个线程拥有自己独立的资源。
实现runnable接口,之后创建的多个线程可以共享处理同一资源。
结论
尽量使用实现Runnable接口的方法。