关于线程的编写:
Java工程师为方便多线程开发,给我们提供了一个内部本身实现Runnable接口的类:Thread类。我们直接继承这个Thread类,然后把我们需要多线程并发执行的代码重写在这个Thread类的run方法里面,然后再依次调用这个Thread子类的构造器来创建线程,线程启动方法start()启动线程到运行状态,就可以了。。
这个是Java中多线程的第一种编写方式,但是在现实当中,用的比较少。主要原因在于这种方式有局限性。你一旦使用了这种方式去实现多线程,那么,就意味着你的程序是单继承的,你才可以这么做。比如你要定义一个学生类class Student让它继承Thread,并把要执行的多线程代码放在了子类重写Thread类的run方法里面。这样建立了一个线程以后,你的这个程序,如果以后或者现在想要扩展继承性,就不具备能力了。比如,你已经将学生类class Student继承自Thread实现了一个线程执行路径,某一天,你突然想从学生类class Student里面提炼出来一个class Person,你想再去继承它,要实现这种关系,那就是不可能的了,因为你使用了继承方式实现的线程编写,而且Java是仅仅支持单继承的。
Sun公司的天才们在开发Java时候,就发现了一个这样子的问题。于是,他们就提供了第二种线程编写的方式:实现Runnable接口方式。
这种方式,好处就在于弥补了上面第一种线程创建方式的缺点,实现Runnable接口,重写接口run方法允许你执行自己的线程代码,
同时实现Runnable接口的类允许你继承另外一个类,弥补了继承Thread方式中java单继承特性引发的缺点。
其内部实现机制就是:利用多态特性,定义Thread类时,为Thread类的构造函数重载了一个方法,这个方法接受一个Runable target参数。
这个地方,可以传入任何实现了Runnable接口的子类对象。而这个Runnable子类是不影响继承性的。
总结一下,Java中线程编写方式就是两种:
1.继承Thread方式。(简单点,就是继承方式)
2.实现Runnable接口方式(简单点,就是实现方式)
|