创建线程的两种方式:
1.继承Thread类,并覆写run()方法。
2.实现Runnable接口,并覆写run()方法。
两者都必须通过 .start()启动线程,因为java是单继承的,继承Thread类的时候会不方便扩展,比如你有一个Student类继承了Thread类,以后你想把Student类中的一些属性,比如name、age,抽象成Person类,而Student类已经继承了Thread类,此时就不方便扩展了。如果实现Runnable接口,就可以避免这个限制,因为java支持一个类实现多个接口。
另外实现Runnable接口比继承Thread类更容易解决资源共享的问题,在Runnable子类中定义的成员变量可以直接被他的子线程共享,如果使用Thread类,就必须把这个变量声明为static才行。 |